distinguish stdout from stderr on pipe
因此,与上面的链接相关,我有一个正在执行 tail
的 child ,而 parent 正在通过 pipe
读取它的输出。
dup2(pipefd[1], STDOUT_FILENO);
dup2(pipefd[1], STDERR_FILENO);
我的问题是,如果 tail
以某种方式失败,我正在读取的管道会发生什么情况?我在 stderr
上能得到什么吗? tail
会自行终止吗?或者它可能会作为 defunct
卡在那里?
最佳答案
当 tail
终止时,内核将向管道上的其他进程发送一个 SIGPIPE
信号。此信号的默认操作(如果未安装处理程序)是终止进程。
如果您不想处理信号,您可以忽略父级中的 SIGPIPE
(这样它不会在 tail
终止时终止),而是每次read
后检查errno
的值是否为EPIPE
。此外,您必须从父级调用 wait
或 waitpid
来获取僵尸子级。
关于c - 如果从管道读取时 tail 失败怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046693/