免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9545 | 回复: 2
打印 上一主题 下一主题

[Linux] 我fork了多个子进程以后,如何能wait它们所有? [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-18 17:06 |显示全部楼层 |倒序浏览
例如,我fork了10个子进程,返回的pid_t放到一个有10个元素的pid_t数组里面。
那么:
我如果简单的写一个for循环,来遍历并调用waitpid的话,前一个进程还在运行,后一个进程已经退出了,那么就相当于后一个进程退出以后一直处于僵尸状态,直到我的父进程已经为前一个进程调用过了waitpid

有没有什么好一点的办法能让我比较优雅的wait所有的子进程呢?
谢谢。

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
2 [报告]
发表于 2015-04-22 09:12 |显示全部楼层
asdf2110 发表于 2015-04-22 08:52
借用网上一段代码回复 1# sentto2


waitpid和wait函数本身就是等待SIG_CHILD信号来到,然后才能返回的吧。
这段程序自己处理了SIG_CHILD,然后在处理函数中再次调用waitpid,那么waitpid还能返回吗? 因为SIG_CHILD已经被处理了。

可能我的理解是错的,但还是疑惑

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
3 [报告]
发表于 2015-04-22 19:56 |显示全部楼层
asdf2110 发表于 2015-04-22 13:29
是先触发 SIGCHLD 信号,然后转到信号处理函数中去处理;
当然也可以不编写信号处理函数,直接丢给 init 进 ...

我的问题在于: 既然wait函数是需要等待信号来到的,那么信号处理函数已经是得到了信号之后的事情了,此时wait拿不到信号,对吧? 那wait函数如何能返回呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP