bash管道-如果第一个可执行文件退出,所有下游可执行文件都会退出吗?
如果我有任意数量的管道源和汇bash管道-如果第一个可执行文件退出,所有下游可执行文件都会退出吗?,bash,pipe,Bash,Pipe,如果我有任意数量的管道源和汇 exec1 | exec2 | exec3 |…… 问题 那么如果execN退出,所有execM下游(M>N)也会退出吗 上游(M
exec1 | exec2 | exec3 |……
问题
execN
退出,所有execM
下游(M>N)也会退出吗李>
下游流程不一定会退出。当
execN
退出时,它关闭管道的写入端,从而关闭execN+1
的标准输入的读取端。但是直到execN+1
尝试从标准输入读取数据之前,它不会注意到,即使这样,它也会简单地检测到它已经到达了文件的末尾;它可以继续做其他事情,也可以根据自己的决定退出
上游,execN-1
不会注意到execN
已退出并关闭其管道读取端,直到execN-1
尝试写入其管道端,此时它将接收到SIGPPIPE信号。该信号的默认处理程序是退出,但execN-1
可以安装自己的处理程序,以决定何时以及是否出现这种情况。有关进程退出并导致上游进程出现SIGPIPE的示例,请参阅。