Linux学习七——进程回收
一.wait函数
wait 阻塞函数
函数作用:
1.阻塞并等待子进程退出
2.回收子进程残留资源
3.获取子进程结束状态(退出原因)
pid_t wait(int *wstatus);
返回值:
‐1 : 回收失败,已经没有子进程了
>0 : 回收子进程对应的pid
wait(NULL):不管是怎么结束的,返回子进程ID
参数 :
status判断子进程如何退出状态
1.WIFEXITED(status):为非0 ,进程正常结束
如上宏为真,使用此宏
WEXITSTATUS(status)获取进程退出状态的参数
2.WIFSIGNALED(status):为非0,进程异常退出
如上宏为真,使用此宏
WTERMSIG(status):取得使进程终止的那个信号的编号
调用一次只能回收一个子进程
wait(NULL):不管是怎么结束的,返回子进程ID
wait(&status)判断子进程怎么退出的(正常退出用WIFEXITED)
为什么exit value is 0? 因为main函数return 的是0,改成return 9,就会是exit value is 9
非正常结束,也就是用信号结束的
二.waitpid函数
函数作用:同wait函数
pid_t waitpid(pid_t pid, int *status, int options);
参数
1.pid: 指定回收某个子进程
pid == ‐1 回收所有子进程
while( (wpid=waitpid(‐1,status,0)) != ‐1) 一次只能回收一个,while循环回收全部子进程
pid > 0 回收某个pid相等的子进程
pid == 0 回收当前进程组的任一子进程
pid < 0 子进程的PID取反(加减号)
2.status: 子进程的退出状态,用法同wait函数
3.options:设置为WNOHANG,函数非阻塞,设置为0,函数阻塞
返回值:
>0 :返回清理掉的子进程ID
‐1 :回收失败,无子进程
如果为非阻塞
=0 :参数3为WNOHANG,且子进程正在运行