首先,wait是waitpid函数的简单版本,接下来我们对二者进行比较和实验。
一、waitpid
waitpid函数原型 pid_t waitpid ( pid_t pid , int *statusp , int options );
1、pid — 判定等待集合的成员
pid>0 | 指定一个单独的子进程,他的进程ID就是pid |
pid=0 | 同一进程组的任意一个进程 |
pid=-1 | 任意一个子进程 |
pid<-1 | 被指定的进程组中的任何子进程,这个进程组的ID就是pid的绝对值。 |
2、options — 修改默认行为
默认 option=0 | waitpid挂起调用进程的执行,直到他的等待集合中的一个子进程终止。如果等待集合中的一个进程在刚调用的时候就已经终止了,那么waitpid就立即返回 |
WNOHANG | 如果等待集合中的任何子进程都还没有终止,那么就立即返回(返回值为0) |
WUNTRACED | 挂起调用进程的执行,直到等待集合中一个正在运行的进程终止或等待集合中一个被停止的进程收到SIGCONT信号重新开始执行 |
WNOHANG|WUNTRACED | 立即返回。如果等待集合中的子进程都没有被停止或终止,则返回0;如果有一个停止或终止,则返回值为该子进程的PID |