如果我有任意数量的管道源和汇
exec1 |执行2 |执行3 | ...
问题
- 那么如果
execN
退出,所有execM
下游(M > N)是否也会退出? - 上游 (M < N) 会怎样?
最佳答案
下游进程不一定会退出。当execN
退出时,它关闭了管道的写端,从而关闭了execN+1
的标准输入的读端。但是直到 execN+1
尝试从标准输入读取,它才会注意到,即使那样,它也只会检测到它已经到达文件末尾;它可以根据自己的决定继续做其他事情或退出。
上游,execN-1
不会注意到 execN
已经退出并关闭其管道的读取端,直到 execN-1
尝试写入管道的末端,此时它将接收到 SIGPIPE 信号。该信号的默认处理程序是退出,但 execN-1
可以安装自己的处理程序来决定何时以及是否会出现这种情况。
关于bash 管道 - 如果第一个可执行文件退出,所有下游可执行文件都会退出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60141701/