fork()之后为子进程分离I / O

时间:2015-08-08 19:03:59

标签: c linux operating-system posix

我正在尝试使用C在Linux上实现一个应用程序,我要求我需要在我的孩子上分别进行I / O操作。父进程。这就是我要找的东西

  1. 用户运行应用程序,父进程生成3个子进程。
  2. 每个子进程都会生成一个等待用户输入的线程。
  3. 应该有一种直观的方法,用户可以通过该方法指定与之交互的子进程中的哪一个。
  4. 理想情况下,我想如果每个子进程都在不同的终端上执行,那么对于与之交互的用户来说这是非常清楚的。

    我在Executing child process in new terminal中看到了类似的问题,但答案对于所涉及的步骤并不十分清楚。它似乎表明可以通过像function onpropertychange() { map.dispatchEvent('movestart'); var view = map.getView(); view.un('propertychange', onpropertychange); map.on('moveend', function() { view.on('propertychange', onpropertychange); }); }; map.getView().on('propertychange', onpropertychange); 那样执行xterm来完成,但它没有得到确认。我还想在父< - >之间设置一些IPC。儿童和儿童孩子< - >子进程也是如此,所以如果我通过执行xterm启动子进程在新终端中,谁是我父进程的子进程?是xterm吗?如果是这样,我实际想要在我的子进程中执行的代码,它将作为xterm的子进程执行吗?

1 个答案:

答案 0 :(得分:0)

假设您已经生成了三个子进程,并且您在tty1上运行了父进程。

  • tty1:现在包含所有诊断信息
  • tty2:子进程1
  • tty3:子进程2
  • tty4:子进程3
  • tty5:用户输入

因此每个子进程都会从其tty读取,就好像它是一个文件一样(注意:需要root权限)。要给孩子进程2提供输入,请转到tty5并输入以下命令: cat - >/dev/tty3

然后输入程序的输入,然后按Ctrl-D。您的子进程2现在应该收到该输入。

编辑您不需要在不同的ttys上实际运行子进程。它只需要以root权限运行它们,然后从那些tty数字读取和写入,就像从stdin读取并写入stdout一样。对不起,感到困惑。