我正在尝试使用 C 在 Linux 上实现一个应用程序,并且我有一个要求,我需要在我的子进程和父进程上单独执行 I/O。这就是我正在寻找的内容
- 用户运行应用程序,父进程生成 3 个子进程。
- 每个子进程都会生成一个等待用户输入的线程。
- 应该有一种直观的方法,用户可以通过该方法指定他正在与哪个子进程交互。
理想情况下,我希望每个子进程都在不同的终端上执行,这样对于正在与之交互的用户来说非常清楚。
我在Executing child process in new terminal看到了类似的问题,但对于所涉及的步骤,答案不是很清楚。似乎表明可以通过像这样的xterm -e sh -c
执行xterm来完成,但尚未得到证实。我还想在父<-->子进程和子<-->子进程之间设置一些IPC,所以如果我通过执行xterm在新终端中启动子进程,它是我父进程的子进程?是 xterm 吗?如果是这样,我实际上想要在子进程中执行的代码,它会作为 xterm 的子进程执行吗?
最佳答案
假设您已经生成了三个子进程,并且您在 tty1 上运行父进程。
- tty1:现在包含所有诊断信息
- tty2:子进程1
- tty3:子进程2
- tty4:子进程3
- tty5:用户输入
因此每个子进程都会从其 tty 中读取数据,就好像它是一个文件一样(注意:需要 root 权限)。例如,要向子进程 2 提供输入,请转到 tty5 并输入以下命令:
cat->/dev/tty3
然后将输入键入到程序中,然后按 Ctrl-D。您的子进程 2 现在应该收到该输入。
编辑您不需要在不同的 tty 上实际运行子进程。只需要使用 root 权限运行它们,然后从这些 tty 数字中读取和写入,就像从 stdin 读取并写入 stdout 一样。抱歉造成困惑。
关于c - fork() 后子进程的独立 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31897514/