我目前正在阅读Stevens / Rago在Unix环境中的高级编程。
在本书的进程组部分中,作者讨论了shell如何通常使用进程组进行流水线操作。
例如,下面显示的参数可能是由...生成的 shell命令的形式:
proc1 | proc2& proc3 | proc4 | proc5
许多其他资源也讨论了进程组和流水线之间的关系。但是,我找不到的一件事是解释如何实现流水线部分。
我知道在像Boune-again shell(BASH)这样的posix / unix shell中,管道中的进程是并行执行的 - 也就是说,在上一个显示proc3 | proc4 | proc5
的示例中,所有这三个进程都是同时执行。 proc4的stdin连接到proc3的stdin。 (我也知道MS-DOS使用临时文件并没有并行执行管道,但暂时忽略它。)
所以,我在进程组中有proc3,proc4,proc5。太棒了。这实际上有助于在它们之间创建管道吗?
据我所知,我需要执行以下操作以在我构建的shell中启用流水线操作:
然而,我所阅读的所有文本都表现为过程组为创建这些管道提供了一些神奇的功能 - 或者他们只是忽略了我上面概述的过程。
任何意见或建议总是受到赞赏。
答案 0 :(得分:3)
进程组不会神奇地提供管道。您需要按照描述设置管道(除非您不需要在步骤3中进行任何类型的确认 - 每个流程只是开始使用其管道,如果另一端不是设置,它将直接阻止,直到它。)
进程组提供的“神奇”是处理信号和共享终端。