文章目录
🤷♂️什么是僵尸进程
✅1.定义
- 一种比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生
僵尸进程
- 僵尸进程会以终止状态保存在进程表中,并且会一直在等待父进程读取退出状态代码
- 所以只要子进程退出,父进程还在继续运行,但父进程
没有读取
子进程状态,子进程就会进去僵死态
✅2.危害
- 进程退出的状态必须被
维持
下去,因为要告诉父进程任务完成的怎么样了,但是这个父进程不太负责任,一直不关心子进程,所以子进程会一直处于僵尸状态- 怎样维护一个状态呢? 是需要用
数据维护
的,这属于进程基本信息,保存在task_struct(PDB)中,试想一下,僵尸状态不退出,PCB就需要一直维护
危害就此产生- 一个父进程可以创建很多子进程,但是不回收,数据结构对象本身需要占用内存,这样一直用下去,但是不释放,不仅仅是内存资源的浪费,还会造成
内存泄漏
✅3.创建
- 通过一段代码,一起看一看僵尸进程,如下是一个维持30秒的僵尸进程
#include <stdio.h> #include <stdlib.h> int main() { pid_t id = fork();//创建子进程 if(id < 0){ //子进程创建失败 perror("fork"); return 1; } else if(id > 0){ //父进程 printf("parent[%d] is sleeping...\n", getpid(