2 qwead2685519 qwead2685519 于 2015.07.25 12:15 提问

Linux子进程退出问题wait和waitpid的问题

当子进程退出,向父进程发生SIGCHLD时,在父进程的信号处理函数中
wait(NULL), 和 wait(-1,NULL,WHOHANG)的区别

阻塞方式 和 不阻塞到底对子进程的回收有什么影响??

3个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.25 14:02

http://blog.chinaunix.net/uid-25365622-id-3045460.html

同步,异步主要看你的父进程处理逻辑,想等等待子进程,还是不需要等继续自己的逻辑处理。

xiaozhagn
xiaozhagn   2015.07.25 14:15

首先问题是:wait(NULL)和waitpid(-1,NULL,WNOHANG)的区别。
一个是阻塞的一个是非阻塞的。阻塞的是当没有已终止的子进程,不过有一个或多个子进程仍在运行时,wait将阻塞到现有子进程第一个终止为止;而waitpid
里的WNOHANG选项告知内核在没有一终止的子进程时不要阻塞,在有尚未终止的子进程时也不要阻塞。
这样的好处是,当有多个子进程同时终止时,wait只能处理一个或几个终止进程,因为它阻塞在某个终止进程时,调用信号处理函数,而此时更多的SIGCHLD
信号到来,它处理不了,就会变成僵尸进程。而waitpid是非阻塞模式,能保证处理完所有终止的子进程。
所以,它俩最大的区别就是能不能全部的处理掉所有的终止子进程。

Arnold9009
Arnold9009   2015.07.28 09:53

对回收没什么影响吧,主要是影响主进程的处理逻辑,即主进程是否关心子进程完全回收完毕

Csdn user default icon
上传中...
上传图片
插入图片