wait
by
进程回收函数
若子进程先于父进程退出,而父进程没有调用 wait
或者 waitpid
函数进行回收,从而使子进程成为了僵尸进程
wait 函数
-
函数原型:
pid_t wait(int *status)
;
-
函数作用:
- 阻塞并等待子进程退出
- 回收子进程残留资源
- 获取子进程结束状态
-
返回值:
- 成功:清理掉的子进程ID
- 失败:-1 (没有子进程)
-
status 参数:子进程的退出状态 – 传出参数
-
WIFEXITED(status):非0 – 进程正常结束
- WEXITSTATUS(status):获取程序退出状态
-
WIFSIGNALED(status):非0 – 进程异常终止
- WTERMSIG(status):取得进程终止的信号编号
-
waitpid 函数
-
函数原型:
pid_t waitpid(pid_t pid, int *status, in options)
-
函数作用:
- 同 wait 函数
-
函数参数:
-
pid:
- pid = -1 等待任一子进程
- pid > 0 等待其进程 ID 与 pid 相等的子进程
- pid = 0 等待进程组 ID 与目前进程相同的任何子进程,也就是说任何和调用waitpid()函数的进程在同一个进程组的进程
- pid < -1 等待其组 ID 等于 pid 的绝对值的任一子进程(适用于子进程在其他组的情况)
- status:子进程的退出状态,用法同 wait 函数
- options:设置为 WNOHANG ,函数非阻塞,设置为 0 , 函数阻塞
-
-
函数返回值:
-
0:返回回收掉的子进程 ID
- -1:无子进程
- =0:参数3 为 WNOHANG ,且子进程正在运行
-