LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: icoming

父进程怎么才能让所有的子进程退出僵尸状态?

[复制链接]
发表于 2010-12-31 00:25:00 | 显示全部楼层
while(1)
{
   if(-1 == wait(NULL))
   break;
}
让shell一直阻塞等待,直到没有任何子进程时,wait出错返回-1.
这是我想到的方法,lz可以验证一下是否可行。
回复 支持 反对

使用道具 举报

发表于 2011-1-2 10:28:52 | 显示全部楼层
Post by icoming;960395
这样子好像有时候会不行吧。比如说:shell一下子运行了很多程序,但是shell不能在接受到SIGCHLD信号的时候才调用wait()。因为这个时候,shell运行命令的时候应该阻塞才对的啊。
用上面的方法,shell会开始标准输入中读数据,这样会影响在上面运行的程序的执行。


没太看明白你说得意思,不过我认为用SIGCHLD是可以的,捕捉信号,然后调用wait,因为有SIGCHLD产生了,所以必然有一个进程需要等待处理,shell调用wait以后会立刻返回的。另外我觉得在处理的时候应该想办法让其他的SIGCHLD排队而不是丢弃掉。
回复 支持 反对

使用道具 举报

发表于 2011-1-19 16:49:05 | 显示全部楼层
Post by icoming;960395
这样子好像有时候会不行吧。比如说:shell一下子运行了很多程序,但是shell不能在接受到SIGCHLD信号的时候才调用wait()。因为这个时候,shell运行命令的时候应该阻塞才对的啊。
用上面的方法,shell会开始标准输入中读数据,这样会影响在上面运行的程序的执行。


想阻塞的话,直接wait 就可以了,如果一个进程都不剩,会直接返回的。阻塞就表示还有进程。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表