假设我们有一个简单的管道:
set -eo pipefail;
echo 'foo' | cat
如何cat
知道何时退出?是 STDIN 流结束时,还是cat
收到信号时?在我的例子中,生产者进程收到一个 SIGINT,然后以代码 1 退出,那么(消费者进程)如何cat
知道生产者进程以哪个退出代码退出呢?
答案1
cat
不知道 的echo
信号。它接收每个文件结束条件人管(7):
如果引用管道写入端的所有文件描述符都已关闭,则尝试从管道读取(2)将看到文件结尾(读取(2)将返回0)。
然而,对于管道的编写者来说,有 SIGPIPE。请参阅相同的手册页