我正在读what's a pipe in an operating system,有些东西我听不懂。
采用一系列以Unix字符分隔的命令,例如
cat file | grep "something"
处理管道|
时会发生什么?我知道可以通过pipe()
函数打开一个Unix管道,但是我看不到在其中涉及的任何过程中都将如何发生“分支”。
会发生什么,如何使用fork(如果有)?
答案 0 :(得分:0)
对于您的情况,实际上发生了两个 es3
调用:一个调用fork
,一个调用cat
。
需要grep
调用,因为POSIX中执行程序的唯一标准方法是使用fork
系列调用,而这些替换当前过程映像使用来自已加载程序的图像。而且,如果外壳程序不对其执行的每个命令exec
进行新处理,则第一个运行的程序将替换外壳程序,并且该外壳程序将不再存在。
已设置管道,以便将管道的写端连接到第一个子进程的标准输出(fork
命令),并将管道的读端连接到第二个子进程的标准输入(cat
命令)。
所有这些都是在shell幕后发生的。