WNOHANG标志解除的是waitpid的阻塞还是信号的阻塞?

o0o_-_ 2020-01-04 11:11:21
在《UNIX网络编程》一书中,有这样的话:
引用
在一个信号处理函数运行期间,正被递交的信号是阻塞的。

如果一个信号在被阻塞期间产生了一次或多次,那么该信号在被解除阻塞后通常只递交一次,即UNIX信号默认是不排队的。


那么在考虑下属过程:
五个子进程同时终止,产生的五个SIGCHLD信号几乎同时到达,父进程进入信号处理函数;

这时,接收到第一个SIGCHLD信号后,SIGCHLD信号是阻塞状态,那后面的几个SIGCHLD信号按照书上所说应该只会递交一次。

这和waipid是否阻塞不就没啥关系了吗?

还是说WNOHANG也会解除SIGCHLD信号的阻塞?


void
sig_child(int signo)
{
pid_t pid;
int stat;

while( (pid = waitpid(-1, &stat, WNOHANG) ) > 0)
printf("xxx\n");

return;
}
...全文
385 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
o0o_-_ 2020-01-04
  • 打赏
  • 举报
回复
找到了一个解释 https://blog.csdn.net/pzqingchong/article/details/52853064 也就是说waitpid并不是依靠信号来回收子进程的。

18,826

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧