当前位置: 技术问答>linux和unix
wait waitpid 区别
来源: 互联网 发布时间:2016-05-25
本文导语: 调用w a i t或w a i t p i d的进程可能会: • 阻塞(如果其所有子进程都还在运行)。 • 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。 • 出错立即返回(如果它没有任何...
调用w a i t或w a i t p i d的进程可能会:
• 阻塞(如果其所有子进程都还在运行)。
• 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。
• 出错立即返回(如果它没有任何子进程)。
waitpid提供了wait的非阻塞版本
问题:此处阻塞该如何理解,调用wait,如果没有子进程终止则父进程在此轮询,直到有子进程终止wait函数返回,父进程才可以继续执行是吗? 如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?
• 阻塞(如果其所有子进程都还在运行)。
• 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。
• 出错立即返回(如果它没有任何子进程)。
waitpid提供了wait的非阻塞版本
问题:此处阻塞该如何理解,调用wait,如果没有子进程终止则父进程在此轮询,直到有子进程终止wait函数返回,父进程才可以继续执行是吗? 如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?
|
如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?
waitpid的非阻塞模式一开始就被设定伪获取子进程的状态功能,而不是一定要获取其终止状态,所以你描述的这种情况,父进程肯定不能获得子进程结束的状态信息啊。你可以自己根据waitpid返回的结果,决定之后还需不需要再调用waitpid。。
waitpid的非阻塞模式一开始就被设定伪获取子进程的状态功能,而不是一定要获取其终止状态,所以你描述的这种情况,父进程肯定不能获得子进程结束的状态信息啊。你可以自己根据waitpid返回的结果,决定之后还需不需要再调用waitpid。。
|
每个子进程退出的时候都会发送一个SIGCHILD的信号,如果这时父进程没有调用wait族的函数,那么该子进程将变成僵尸进程直到父进程调用wait族函数为止。
当然,如果一个进程的父进程是init,不会产生僵尸进程。
当然,如果一个进程的父进程是init,不会产生僵尸进程。
|
其实也会的,只是这个僵尸进程存在的时间实在是太短了,你看不到而已,一个进程退出到其父进程wait动作前就是处在僵尸状态。
|
我认为之所以叫僵尸是因为它还占着资源而且不会自动释放(我死活就癞上了),这里虽然也是没有释放其他条件同僵尸但是会很快释放的,所以不能叫做僵尸了.