bash管道-如果第一个可执行文件退出,所有下游可执行文件都会退出吗?

bash管道-如果第一个可执行文件退出,所有下游可执行文件都会退出吗?,bash,pipe,Bash,Pipe,如果我有任意数量的管道源和汇 exec1 | exec2 | exec3 |…… 问题 那么如果execN退出,所有execM下游(M>N)也会退出吗 上游(M

如果我有任意数量的管道源和汇

exec1 | exec2 | exec3 |……

问题

  • 那么如果
    execN
    退出,所有
    execM
    下游(M>N)也会退出吗
  • 上游(M
    下游流程不一定会退出。当
    execN
    退出时,它关闭管道的写入端,从而关闭
    execN+1
    的标准输入的读取端。但是直到
    execN+1
    尝试从标准输入读取数据之前,它不会注意到,即使这样,它也会简单地检测到它已经到达了文件的末尾;它可以继续做其他事情,也可以根据自己的决定退出

    上游,
    execN-1
    不会注意到
    execN
    已退出并关闭其管道读取端,直到
    execN-1
    尝试写入其管道端,此时它将接收到SIGPPIPE信号。该信号的默认处理程序是退出,但
    execN-1
    可以安装自己的处理程序,以决定何时以及是否出现这种情况。

    有关进程退出并导致上游进程出现SIGPIPE的示例,请参阅。