gpt4 book ai didi

c - read(signalfd)后,是否需要调用waitid()?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:56 24 4
gpt4 key购买 nike

在 signalfd 上调用 read() 是否会消耗 SIGCHLD?或者我需要在之后调用 waitid() 来消费吗?

我通过调用 epoll_wait() 在 signalfd 上接收到可读事件,然后我在 signalfd 上执行 read(),它提供了 signalfd_siginfo 中所需的所有信息。我在 read() 上循环直到返回 -1 和 errno=EAGAIN。但是使用 shell 命令 ps aux,进程仍然在这里 <defunct> .

如果我用 waitid() 循环,我就没有问题。为什么我需要在 read(signalfd) 之后调用 waitid()?

我在联机帮助页中看不到这种行为,也找不到相关的源代码示例。

最佳答案

您需要调用wait在获得 SIGCHLD来自 signalfd。您的 <defunct> 清楚地证明了这一点来自 ps 的输出.

如果您不关心子进程返回码,请设置 SIGCHLDSIG_IGN处理.没有更多的僵尸。

关于c - read(signalfd)后,是否需要调用waitid()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56341850/

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