【问题标题】:Separate I/O for child process after fork()fork() 后子进程的单独 I/O
【发布时间】:2015-08-08 19:03:59
【问题描述】:

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

  1. 用户运行应用程序,父进程产生 3 个子进程。
  2. 每个子进程都会产生一个等待用户输入的线程。
  3. 应该有一种直观的方法,用户可以通过该方法指定他正在与哪个子进程进行交互。

理想情况下,如果每个子进程都在不同的终端上执行,那么我希望与他交互的用户非常清楚。

我在Executing child process in new terminal看到了一个类似的问题,但是关于所涉及的步骤,答案不是很清楚。似乎暗示可以通过像xterm -e sh -c这样执行xterm来完成,但没有得到证实。我还想在父 子和子 子进程之间设置一些 IPC,所以如果我通过执行 xterm 在新终端中启动子进程,谁是我父进程的子进程?是xterm吗?如果是这样,我实际上想在我的子进程中执行的代码,它会作为 xterm 的子进程执行吗?

【问题讨论】:

    标签: c linux operating-system posix


    【解决方案1】:

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

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

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

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

    编辑您不需要在不同的 tty 上实际运行子进程。只需要以 root 权限运行它们,然后从这些 tty 号码读取和写入,就像从标准输入读取和写入标准输出一样。很抱歉造成混乱。

    【讨论】:

    • cat 默认以 EOF 结束。如果您不想将输出写入stdout,为什么还要使用tee?您的命令行可以简化为等效(并且更短)的形式 cat >/dev/tty3
    • 谢谢Daniel,能否详细说明我将如何在不同的tty下运行子进程。
    猜你喜欢
    • 2020-08-13
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多