关闭消费者的正确方法

关闭消费者的正确方法

假设我们有一个简单的管道:

set -eo pipefail;
echo 'foo' | cat

如何cat知道何时退出?是 STDIN 流结束时,还是cat收到信号时?在我的例子中,生产者进程收到一个 SIGINT,然后以代码 1 退出,那么(消费者进程)如何cat知道生产者进程以哪个退出代码退出呢?

答案1

cat不知道 的echo信号。它接收每个文件结束条件人管(7):

如果引用管道写入端的所有文件描述符都已关闭,则尝试从管道读取(2)将看到文件结尾(读取(2)将返回0)。

然而,对于管道的编写者来说,有 SIGPIPE。请参阅相同的手册页

相关内容