gpt4 book ai didi

c - 如果从管道读取时 tail 失败怎么办

转载 作者:行者123 更新时间:2023-12-01 23:34:49 25 4
gpt4 key购买 nike

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。此外,您必须从父级调用 waitwaitpid 来获取僵尸子级。

关于c - 如果从管道读取时 tail 失败怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com