c - 读取(signalfd)之后,是否需要调用waitid()?
问题描述
对 signalfd 的 read() 调用是否会消耗 SIGCHLD?或者我需要在之后使用 waitid() 调用吗?
我通过调用 epoll_wait() 在 signalfd 上接收到可读事件,然后我在 signalfd 上执行 read(),它提供了 signalfd_siginfo 中所需的所有信息。我在 read() 上循环,直到返回 -1 和 errno=EAGAIN。但是使用 shell 命令 ps aux,进程仍然在这里<defunct>
。
如果我使用 waitid() 循环,我没有问题。为什么我需要在 read(signalfd) 之后调用 waitid() ?
我在联机帮助页中看不到这种行为,也找不到源示例。
解决方案
您需要调用从 signalfdwait
获取。SIGCHLD
您的<defunct>
输出清楚地证明了这一点ps
。
如果您从不关心子进程返回码,请设置SIGCHLD
为由SIG_IGN
. 没有更多的僵尸。
推荐阅读
- algorithm - 合并排序递归
- ffmpeg - 转换为 yuv422p 像素格式不正确
- php - 如果 PDO Fetch() 请求没有返回记录,则无法回显字符串
- reactjs - 在 Storybook 选择选项中导入道具
- nginx - Nuxt.js Full Static - 应用程序配置文件的存储位置
- r - 加载本地 .osm 文件以显示/绘制地图
- javascript - Moment.JS:fromNow() 更准确
- reactjs - 使用 Reacthookforms 和 Yup 动态禁用字段
- java - 使用压缩滚动的 logback zip 日志是否需要安装“zip”linux 实用程序?
- reactjs - 在 ReactJS 中,由于其奇怪的结构,在从 API 呈现数据时面临问题