文章目录
一.进程的退出
进程=内核PCB+数据和代码,它们都要占据内存空间,进程退出的核心工作之一就是释放掉自己的PCB+数据和代码。
为什么要创建出进程呢?一定是我要进程完成某些任务!
当进程退出了,不光光只是退出了这么简单,你还要知道该进程把任务完成的怎么样吧,这里的你指的是谁啊?
一般指的是父进程或者OS,进程退出的时候,要有一些退出信息,表明自己把任务完成得怎么样了!
比如说平时我们写代码,给main函数的返回值都是return 0的,为什么这里我们要返回0呢?返回1,2,3等等行不行,
其实这里return 0就是一种退出信息,表示将任务完成的很好。(后续细说这个退出码)
进程退出了,退出信息会由OS写到该退出进程的PCB中,可以允许进程的代码和数据空间释放掉,但是它的退出信息还没有被父进程或OS读取到,OS就还必须维护该进程的PCB!
此时,该进程算是退出了吗?OS已经不会再调用该进程了,但是它的PCB确实还存在着,这时的进程就叫做僵尸进程。
二.Z(zombie)-僵尸进程
1.什么是僵尸进程?
僵尸状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,后面讲)
没有读取到子进程退出的返回代码时就会产生僵尸(死)进程。
僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。
用代码来验证僵尸进程:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t id=fork();
if(id<0)
return 1;
else if(id==0)//子进程<