假设我们有一个简单的管道:
set -eo pipefail; echo 'foo' | cat
怎么cat知道什么时候退出?是STDIN流结束还是cat接收到信号?在我的情况下,生产者进程接收到SIGINT,然后以代码1退出,那么cat(消费者进程)如何知道生产者进程以哪个退出代码退出?
cat
cat不了解echo的信号。它通过每个人工管道接收文件结束条件(7):
echo
如果所有引用管道写端的文件描述符都已关闭,则从管道读取(2)的尝试将看到文件末尾(read(2)将返回0)。
对于管道的编写者来说,有SIGPIPE。见同一手册页
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
点击生成二维码
我来说两句