Linux进程控制-子进程回收
父进程有义务回收子进程
- 孤儿进程:父进程先于子进程死亡.(此时init进程就是该子进程的父进程);
- 僵尸进程:子进程执行完毕后,父进程没有回收.(子进程残留资源(pcb)存在内核里).
注意:僵尸进程不能被kill命令清除.(因为僵尸进程已经运行完毕,此时只有杀死它的父进程,让init进程领养此子进程)(Z:僵尸进程;S:后台;R:运行)
使用wait()和waitpid()可以对进程进行回收. - wait()和waitpid()
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include<stdlib.h>
#include <sys/wait.h>
/*****************************************************************************************************************************************
*函数:wait()
*头文件:#include <sys/types.h> #include <sys/wait.h>
*格式:pid_t wait(int *status); //pid_t:返回值;int *status:没有加const,是一个传出参数(传出的进程死亡状态,借助宏函数判断).见下面图片1,重点掌握1和2.
*作用:1.阻塞回收子进程(父进程wait()函数后面的动作不执行,等待回收之后再运行);2.回收子进程资源;3.获取子进程结束状态(死亡原因)
*返回值:成功-返回回收的子进程ID;失败--1(没有子进程)
********************************************************************************************************************************************
*函数:waitpid()
*头文件:#include <sys/types.h> #include <sys/wait.h>
*格式:pid_t waitpid(pid_t pid, int *status, int options);//pid_t 返回值(回收的子进程ID值或则-1);第一个参数:pid >0时,表示指定回收某个子进程,=-1时,表示回收任意子进程(相当与wait())
*,(了解 <-1时,表示回收当前进程的同组的所有子进程,=0,表示回收本组任意进程);int *status():是一个传出参数(传出的进程死亡状态,借助宏函数判断);int options:为WNOHANG时,表示轮询,为0时,表示阻塞状态.
*作