一、wait回收子进程
一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,==但它的PCB还保留着,内核在其中保存了一些信息:==如果是正常终止则保存着退出状态;如果是异常终止则保存着导致改进程终止的信号是哪个,这个进程的父进程可以调用wait或waitpid获取这些信号,然后彻底清除掉这个进程。
进程的退出状态可以在shell中用特殊变量$?查看,因为shell是它的父进程,当它终止时,shell调用wait或waitpid得到它的退出状态同时彻底清除掉这个进程
父进程调用wait函数可以回收子进程终止信息,该函数有三个功能:
- 阻塞等待子进程退出(一定要等到子进程死了才走)
- 回收子进程残留资源
- 获取子进程结束状态(退出原因)
pid_t wait(int *status)
,status是一个返回参数,成功返回回收子进程的进程id,失败返回-1
部分代码一览:
只有子进程死亡了父进程才会返回
- 返回状态status的用法:
二、回收子进程退出值和异常终止信号
使用wait函数传出参数status来保存进程的退出状态,借助宏函数来进一步判断进程终止的具体原因*
WIFEXITED\WEXITSTATUS\WTERMSIG
三、waitpid回收子进程
1,pid可以指定某一个进程进行回收
2,status可以获取子进程的退出状态和异常终止信号
3,options用来设置非阻塞WNOHANG
特殊参数和返回情况:·
四、回收多个子进程
用while循环实现