两个函数的原型:
pid_t wait(int *statloc)
pid_t waitpid(pid_t pid,int *statloc,int options)
功能:当子进程终止时返回,主要用来处理已终止的子进程。当子进程处理完任务后,处于僵死状态,也就成为了僵死进程,父类可以通过上面两个函数捕获到,从而处理掉僵死进程,归还内存、CPU等资源。
提问:如果父进程没有处理,放任僵死进程横行,最后父进程消亡了怎么办?
答: 父进程消亡了,子进程就变成了孤儿进程,将孤儿进程的父进程id设置为1,也就是init进程,最后由init进程处理这些僵死的孤儿进程。
函数wait
有两个返回参数,直接返回的pid_t 是已经返回的子进程ID(如果错误返回0或者-1),statloc子进程终止状态,可由终止状态知道子进程的死因(正常死亡、由信号杀死、任务作业控制停止)。
wait 是阻塞的,如果调用wait的进程没有子进程终止,不过有一个或者多个子进程在运行,那么wait将阻塞到第一个子进程终止为止。
函数waitpid
有两个输入参数和两个返回值。返回值与wait的返回相同。
两个输入参数:
pid_t pid: 可以用于指定调用waitpid的进程的在等待特定子进程返回。如果pid = -1,表示第一个返回的子进程。
options: 允许我们制定附加选项,如WNOHANG,告诉内核在没有子进程终止时,不阻塞。
waitpid是不阻塞的,当pid = -1时,与wait相同。