运行多个分叉进程并不断读取其标准,同时打印到其标准中

时间:2017-09-24 22:49:48

标签: c process pipe

我希望运行X个流程,我可以通过这些流程进行迭代,以便运行程序,其中有主人和'奴隶'接受主人命令并返回一个字符串。

我正在用C语言写作。我想知道我如何能够在进程之间设置管道和分叉以从标准输入和输出中读取。我现在能够让它们一次一个地工作直到被杀,但我想简单地读一行然后转到下一个过程。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

通常,这种编程的常见策略是设置事件循环。 您可以设置管道并将它们连接到程序的stdin和stdout。 您没有指定您正在使用的语言。 在C中,您将创建两个管道,一个用于读取,另一个用于写入。 然后你会叉。在fork之后,在子节点中,关闭stdin和stdout,并使用Exception in thread "main" java.lang.ClassNotFoundException: com.example.manish.myapplication.MainActivityKt at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:107) 系统调用将管道文件描述符的一端复制到子节点。

在父级中,您将每个进程连接到一个事件循环,这可以让您知道其中一个FD何时可以读取或写入。

有关使用管道和dup2的讨论,请查看这些class notes

以下是libevent的简介,这是C的常见事件循环之一。

对于其他语言,你会做类似的事情。例如,对于Python,请查看dup2对子进程的支持。