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

问题描述 投票:0回答:1

如果我有任意数量的管道源和接收器

exec1 | exec2 | exec3 | ...

问题

  1. 然后,如果execN退出,下游的所有execM(M> N)也会退出吗?
  2. 上游的会发生什么(M
bash pipe
1个回答
0
投票

下游进程不一定会退出。当execN退出时,它将关闭管道的写入端,从而关闭execN+1的标准输入的读取端。但是,直到execN+1尝试从标准输入中进行read为止,它都不会注意到,即使那样,它仍然会简单地检测到它已到达文件末尾;它可以继续做其他事情,也可以根据自己的决定退出。

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

© www.soinside.com 2019 - 2024. All rights reserved.