首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

wait waitpid 区别,该如何解决

2012-02-02 
wait waitpid 区别调用w a i t或w a i t p i d的进程可能会:? 阻塞(如果其所有子进程都还在运行)。? 带子进

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

waitpid提供了wait的非阻塞版本

问题:此处阻塞该如何理解,调用wait,如果没有子进程终止则父进程在此轮询,直到有子进程终止wait函数返回,父进程才可以继续执行是吗? 如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?

[解决办法]
如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?

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

[解决办法]
其实也会的,只是这个僵尸进程存在的时间实在是太短了,你看不到而已,一个进程退出到其父进程wait动作前就是处在僵尸状态。

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

[解决办法]
探讨
其实也会的,只是这个僵尸进程存在的时间实在是太短了,你看不到而已,一个进程退出到其父进程wait动作前就是处在僵尸状态。

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

热点排行