wait waitpid 区别

tianhailong 2009-02-17 10:34:19
调用w a i t或w a i t p i d的进程可能会:
• 阻塞(如果其所有子进程都还在运行)。
• 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。
• 出错立即返回(如果它没有任何子进程)。

waitpid提供了wait的非阻塞版本

问题:此处阻塞该如何理解,调用wait,如果没有子进程终止则父进程在此轮询,直到有子进程终止wait函数返回,父进程才可以继续执行是吗? 如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?
...全文
2695 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtting_8984313 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 guosha 的回复:]
其实也会的,只是这个僵尸进程存在的时间实在是太短了,你看不到而已,一个进程退出到其父进程wait动作前就是处在僵尸状态。

引用 2 楼 zg_hover 的回复:
每个子进程退出的时候都会发送一个SIGCHILD的信号,如果这时父进程没有调用wait族的函数,那么该子进程将变成僵尸进程直到父进程调用wait族函数为止。
当然,如果一个进程的父进程是init,不会产生僵尸进程。

[/Quote]

我认为之所以叫僵尸是因为它还占着资源而且不会自动释放(我死活就癞上了),这里虽然也是没有释放其他条件同僵尸但是会很快释放的,所以不能叫做僵尸了.
快乐田伯光 2009-02-18
  • 打赏
  • 举报
回复
其实也会的,只是这个僵尸进程存在的时间实在是太短了,你看不到而已,一个进程退出到其父进程wait动作前就是处在僵尸状态。

[Quote=引用 2 楼 zg_hover 的回复:]
每个子进程退出的时候都会发送一个SIGCHILD的信号,如果这时父进程没有调用wait族的函数,那么该子进程将变成僵尸进程直到父进程调用wait族函数为止。
当然,如果一个进程的父进程是init,不会产生僵尸进程。
[/Quote]
  • 打赏
  • 举报
回复
如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?

waitpid的非阻塞模式一开始就被设定伪获取子进程的状态功能,而不是一定要获取其终止状态,所以你描述的这种情况,父进程肯定不能获得子进程结束的状态信息啊。你可以自己根据waitpid返回的结果,决定之后还需不需要再调用waitpid。。
一 铭 2009-02-17
  • 打赏
  • 举报
回复
每个子进程退出的时候都会发送一个SIGCHILD的信号,如果这时父进程没有调用wait族的函数,那么该子进程将变成僵尸进程直到父进程调用wait族函数为止。
当然,如果一个进程的父进程是init,不会产生僵尸进程。

3,286

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 实用资料发布区
社区管理员
  • 实用资料发布区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧