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

标签 bash pipe

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

exec1 |执行2 |执行3 | ...

问题

  1. 那么如果 execN 退出,所有 execM 下游(M > N)是否也会退出?
  2. 上游 (M < N) 会怎样?

最佳答案

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

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

关于bash 管道 - 如果第一个可执行文件退出,所有下游可执行文件都会退出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60141701/

相关文章:

go - 关闭加密 ssh session 以释放 golang 中所有资源的正确方法?

c - 如何使用 dup2 将 stdin 和 stdout 重定向到管道文件描述符?

bash - 当 shell 脚本被杀死时终止正在运行的命令

linux - cd/bash 在符号链接(symbolic link)上的行为

C 中的程序可以在后台生成和调用 bash 脚本,甚至可以解析参数吗?

C++:Linux:从 `cout` 以外的多个线程或流通过管道传输到我的程序

c - 为什么我的 C 管道输出仍然产生垃圾数据?

bash - 意外的 if 语句行为

bash - 期望在 bash 中对 ssh 密码进行异常处理

c - 为什么代码显示写入管道不能确保原子性?