什么是僵尸进程(状态)?什么是孤儿进程?各自有什么危害?如何解决?
僵尸进程
形成原因
僵死状态(Zombies)是一个比较特殊的状态;
当子进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程;
僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
总的来说:子进程退出,父进程还在运行,父进程没有读取子进程状态,子进程进入僵尸状态(Z状态)
危害
1、维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说,僵尸状态一直不退出,PCB一直都要维护
2、假设一个父进程创建很多子进程不回收,会造成内存资源浪费
3、会造成内存泄漏
解决方案
进程等待---wait函数和waitpid函数
wait函数
创建一个子进程,子进程正常逻辑,父进程调用wait函数来进行等待,当子进程退出的时候,由于父进程在等待,所以子进程就不会变成僵尸进程
父进程一开始调用wait函数,就会阻塞在wait函数中,等待子进程
直到子进程退出,wait函数调用才返回,父进程接着执行wait函数之后的代码
孤儿进程
形成原因
父进程先于子进程退出,子进程会被1号进程领养(1号进程称init进程)
1号进程会在子进程退出的时候,回收子进程的退出信息,防止子进程变成僵尸进程
危害
没什么危害,因为该进程只是父进程换成了init进程,依然可以正常运行
分类:
操作系统
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了