一、僵死进程(僵尸进程)
(一)僵死进程产生的原因(条件)
其实,僵死进程的定义也就是它的产生原因(条件),让我们一起了解一下吧!
当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程。(这句话非常重要!!!)
我们来进一步了解一下:
1、退出码:(举个例子)exit(0)中的0就是退出码,表示正常退出。
2、用我们自己的话解释僵死进程就是:不是就绪、阻塞、运行(进程的三个基本状态)的进程就是僵死进程。
3、在有父、子进程的情况下,正常删除子进程的步骤:(1)先释放子进程的实体(2)将子进程的退出码赋值为0(3)父进程获取子进程的退出码(4)删除子进程的PCB(也就是进程控制块)
简而言之,就是子进程先结束,并且父进程没有获取它的退出码;
那么僵死进程产生的原因或者条件就是:子进程先于父进程结束,并且父进程没有获取子进程的退出码;
(二)僵死进程的产生过程
让我们通过图片更加清楚的了解产生过程吧




上面的图片从左到右、从上到下分别为初始、1、2、3步,产生僵死进程则就出现在第三步
(三)观察僵死进程
让我们通过代码一起来观察一下僵死进程,用到的代码我放在下面啦!
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>
int main(){
char *s=NULL;
int n=0;//控制父子进程执行的次数;
pid_t id=fork();
assert(id !=- 1);
if(id == 0){
s="chi

最低0.47元/天 解锁文章
1006

被折叠的 条评论
为什么被折叠?



