两个函数的原型如下:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
可以通过status获取子进程的退出状态,如果不关心,可以将status置为NULL
对于waitpid函数,pid参数可以设置为以下任意值:
<-1 回收进程组id等于pid绝对值的任意子进程
-1 回收任意的子进程
0 回收进程组id等于调用进程的任意进程
>0 回收等于pid的子进程
options参数可以设置为以下值:
WNOHANG
WUNTRACED
WCONTINUED
函数成功调用返回进程id,如果失败返回0或者-1
wait和waitpid的区别有以下几点:
1、wait会使调用者阻塞,即父进程会阻塞在wait调用上。而waitpid可选非阻塞方式。
2、当有子进程结束时,wait调用就返回。如果父进程产生了多个子进程,如果使用wait意味着父进程无法指定具体回收某一个子进程。waitpid参数中,可以指定回收某一个特定的子进程。