父进程可能比子进程早结束,如果父进程要阻塞以等待子进程,可以使用wait或waitpid函数,wait函数只是waitpid函数的简化版。
#include <sys/wait.h>
#pid_t wait (int * statloc);
#pid_t waitpid (pid_t pid, int * statloc, int optins);
区别:
在一个子进程终止前,wait使其调用者被阻塞,而waitpid有一个选项,可以使调用者阻塞或者不阻塞。
对于waitpid函数中的pid参数的作用见下表:
pid == -1 |
等待任一子进程。 |
pid > 0 |
等待其进程ID与pid相等的子进程 |
pid == 0 |
等待其组ID等于调用进程组ID的任一的子进程 |
pid < -1 |
等待其组ID等于pid绝对值的任一的子进程 |
对于waitpid函数中的options参数的作用见下表:
WCONTINUED |
若实现支持作业控制,那么由pid指定的任一子进程在暂停后已经继续,但是状态没报告,则返回其状态 |
WNOHANG |
若由pid指定的子进程并不是立即可用的,则waitpid不阻塞,此时返回值为0 |
WUNTRACED |
若实现支持作业控制,那么由pid指定的任一子进程已经处于暂停状态并没报告过,则返回其状态 |