首先,我想问一下管道为什么需要叉子?我对此很新,但对我来说,我还不明白为什么我不能只在一个左边运行一个进程。然后让下一部分继续使用结果作为输入。我知道叉子已被使用,但我不知道为什么或需要它们。
非常感谢你回答这个问题,尽管这可能是一个愚蠢的问题。
答案 0 :(得分:1)
阅读Advanced Linux Programming& intro(2);它 - ALP书 - 几章解释了这一点。也许研究一些免费软件shell的源代码。还可以使用strace(1)
pipe(7)具有一定(小)容量PIPE_BUF
(几千字节)。填充该管道时,将阻止写入过程。当读取过程已读取所有内容时,管道变空,并且读取过程被阻止。因此,编写过程有机会在其中运行和写入。
因此,您需要两个进程同时运行 (并且它们可以交换大量数据 - 例如几秒内的千兆字节)。而fork
是唯一制作新流程的方式。
答案 1 :(得分:1)
fork()
或变体不仅是执行通过管道连接的程序,而且是执行任何程序所必需的。原因是 - exec..()
函数系列将当前进程替换为由exec加载的进程。因此,为了让您的shell程序在子程序终止后继续,您必须调用fork()
对于管道,管道缓冲区相对较小,但程序通过管道进行通信的数据量可能很大。为了有效地工作,两个程序必须并行运行。