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



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

exec1 | exec2 | exec3 | ...

问题

  1. 那么如果execN退出,下游(M> N(的所有execM也会退出吗?
  2. 上游的(M <N(会发生什么?>

下游进程不一定会退出。当execN退出时,它会关闭管道的写入端,从而关闭execN+1标准输入的读取端。但是直到execN+1尝试从标准输入中读取,它不会注意到,即使这样,它也只会检测到它已经到达文件的末尾;它可以继续做其他事情或退出,正如它所决定的那样。

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

最新更新