本文主要是介绍函数wait和waitpid(UNIX环境高级编程笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当一个进程退出或异常终止时,内核会向其父进程发送SIGCHLD信号。
调用wait或waitpid的进程会发生以下情况:
(1)如果其所有子进程都还在运行,则阻塞。
(2)如果一个子进程已经终止,正等待父进程回收获取其终止状态,则取得该子进程的终止状态立即返回。
(3)如果没有任何子进程,则立即出错返回。
#include <sys/wait.h> pid_t wait(int *statloc) pid_t waitpid(pid_t, int *statloc, int options) 两个函数返回值:若成功,返回进程ID;若出错,返回0或者-1 |
---|
这两个函数的区别如下:
(1)在一个进程终止前,wait使其调用者阻塞,而waitpid有一选项,可使调用者不阻塞。
(2)waitpid并不等待在其调用之后的第一个终止子进程,它有若干选项,可以控制它所等待的进程。
这连个函数的statloc是一个整形指针。如果statloc不是一个空指针,则终止进程的终止状态就放在它所指向的单元内。如果不关心终止进程的终止状态,可置空。
对于waitpid中的pid参数的作用解释如下:
pid = = -1 等待任一子进程。在此种情况下,waitpid和wait等效。
pid > 0 等待进程ID与pid相等的子进程。
pid = = 0 等待组ID等于调用进程组ID的任一子进程。
pid < -1 等待组ID等于pid的绝对值的任一子进程。
options参数使我们能够进一步控制waitpid的操作。此参数或者是0,或者是下图中的常量按位或运算的结果。
这篇关于函数wait和waitpid(UNIX环境高级编程笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!