获取子进程结束状态
原型
pid_t wait(int * statloc) ;
pid_t waitpid(pid_t pid , int * statloc , int options) ;
int waitid(idtype_t idtype , id_t id , siginfo_t * infop , int options) ;
pid_t wait3(int * statloc , int options , struct rusage * rusage) ;
pid_t wait4(pid_t pid , int * statloc , int options , struct rusage * rusage) ;
wait会阻塞调用进程
如果父进程希望获取子进程的结束状态时,可以调用wait函数来获取。通常情况下,父进程得知子进程结束时,接收到
SIGCHILD信号后,才会调用wait。因为,wait会阻塞调用进程,若父进程在不确定子进程是否结束便调用这两个
函数,则若没有子进程结束,父进程将被挂起,直到有子进程退出。
wait和waitpid的区别
wait获取任何一个,自wait调用处,第一个结束的进程退出状态值,并且会阻塞父进程。若wait调用之前已经有多个
子进程结束,则获取最先结束的。因为,wait是被signal handler调用的,因此,每当一个子进程结束时,便会调用一次
wait获取状态。
waitpid获取指定的pid的子进程,并且可以通过第3个参数option,防止父进程阻塞。
wait waitpid与waitid wait3 wait4
相比较于waitid,wait3,wait4,wait和waitpid已经可以满足大多数应用,waitid使用方法与waitpid相似,可以看做是waitpid的增强版。wait3和wait4相比较于wait,waitpid,waitid,增加了获取进程所使用资源的功能。