- 论坛徽章:
- 0
|
调用w a i t或w a i t p i d的进程可能会:
• 阻塞(如果其所有子进程都还在运行)。
• 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。
• 出错立即返回(如果它没有任何子进程)。
waitpid提供了wait的非阻塞版本
问题:此处阻塞该如何理解,
阻塞的意思就是wait 或者waitpid 不返回,程序在这里等待条件满足才返回
调用wait,如果没有子进程终止则父进程在此轮询,直到有子进程终止wait函数返回,父进程才可以继续执行是吗?
是的,父进程调用wait,wait返回的条件是有子进程退出,wait返回了,后面的代码才会执行
如果是,那么waitpid的非阻塞呢,
如果父进程调用waitpid函数的时候,第三个参数设置WNOHANG,那么父进程就不会在waitpid处阻塞,即使没有进程符合waitpid中等待的条件,waitpid也会立即返回0
父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?
所以你最好在父进程中设置SIG_CHILD信号处理函数,当有子进程退出的时候,父进程会收到SIG_CHILD信号
在信号处理函数内部调用wait或者waitpid来收集子进程的返回信息,这样就不会发生父进程不能获得子进程结束时的返回信息了
关于wait ,waitpid unix环境高级编程中有一节section 8.6 wait and waitpid functions 作了详细的介绍。
楼主可以看一下
[ 本帖最后由 zhuhefang2006 于 2009-2-17 12:04 编辑 ] |
|