当子进程退出,向父进程发生SIGCHLD时,在父进程的信号处理函数中wait(NULL), 和 wait(-1,NULL,WHOHANG)
的区别
阻塞方式 和 不阻塞到底对子进程的回收有什么影响??
首先问题是:wait(NULL)和waitpid(-1,NULL,WNOHANG)
的区别。
一个是阻塞的一个是非阻塞的。阻塞的是当没有已终止的子进程,不过有一个或多个子进程仍在运行时,wait将阻塞到现有子进程第一个终止为止;而waitpid
里的WNOHANG选项告知内核在没有一终止的子进程时不要阻塞,在有尚未终止的子进程时也不要阻塞。
这样的好处是,当有多个子进程同时终止时,wait只能处理一个或几个终止进程,因为它阻塞在某个终止进程时,调用信号处理函数,而此时更多的SIGCHLD
信号到来,它处理不了,就会变成僵尸进程。而waitpid是非阻塞模式,能保证处理完所有终止的子进程。
所以,它俩最大的区别就是能不能全部的处理掉所有的终止子进程。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。