开发者社区> 问答> 正文

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

当子进程退出,向父进程发生SIGCHLD时,在父进程的信号处理函数中
wait(NULL), 和 wait(-1,NULL,WHOHANG)的区别
阻塞方式 和 不阻塞到底对子进程的回收有什么影响??

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

    2019-07-17 19:26:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载