进程回收
wait阻塞函数
pid_t wait (int * status);
返回值:
a) -1 回收失败,说明已经没有子进程。
b) 大于0:回收是子进程的pid
参数: status
判断子进程是如何死的
a) 正常退出
b)被某一个信号杀死
调用一次只能回收一个子进程
子进程的退出状态 --传出参数
WIFEXITED(status):
为非0,进程正常结束
WEXITSTATUS(status)
如果上面的宏为真,则使用现在的这个宏来获取进程退出状态的参数。
WIFSIGNALED(status)
为非0,进程异常终止
WTERMSIG (status)
如果上宏为真,则使用此宏,取得该进程终止的那个信号的编号
waitpid
pid_t waitpid (pid_t pid, int *status, int options);
作用同wait
参数
options: 设置为WNOHANG,函数非阻塞,设置为0,函数阻塞
status子程序的退出状态,用法同wait
pid :
- -1 ,等待任意子进程
- 》0 ,等待其进程Id与pid相等的子进程
- ==0 ,等待其组ID等于调用进程的组ID的任一子进程
- 《-1 等待其组id等于pid的绝对值的任一子进程
返回值
大于0 返回清理的子进程id
-1 无子进程
等于0,参3为WNOHANG,且子进程正在运行