问题描述
- Linux子进程退出问题wait和waitpid的问题
-
当子进程退出,向父进程发生SIGCHLD时,在父进程的信号处理函数中
wait(NULL), 和 wait(-1,NULL,WHOHANG)的区别阻塞方式 和 不阻塞到底对子进程的回收有什么影响??
解决方案
http://blog.chinaunix.net/uid-25365622-id-3045460.html
同步,异步主要看你的父进程处理逻辑,想等等待子进程,还是不需要等继续自己的逻辑处理。
解决方案二:
首先问题是:wait(NULL)和waitpid(-1,NULL,WNOHANG)的区别。
一个是阻塞的一个是非阻塞的。阻塞的是当没有已终止的子进程,不过有一个或多个子进程仍在运行时,wait将阻塞到现有子进程第一个终止为止;而waitpid
里的WNOHANG选项告知内核在没有一终止的子进程时不要阻塞,在有尚未终止的子进程时也不要阻塞。
这样的好处是,当有多个子进程同时终止时,wait只能处理一个或几个终止进程,因为它阻塞在某个终止进程时,调用信号处理函数,而此时更多的SIGCHLD
信号到来,它处理不了,就会变成僵尸进程。而waitpid是非阻塞模式,能保证处理完所有终止的子进程。
所以,它俩最大的区别就是能不能全部的处理掉所有的终止子进程。
解决方案三:
对回收没什么影响吧,主要是影响主进程的处理逻辑,即主进程是否关心子进程完全回收完毕
时间: 2024-11-02 13:10:23