2616

OP1

Q: 什么是孤儿进程(orphan process),什么是僵尸进程(zombie process)?

** A:** 孤儿进程指的是父进程退出后仍在运行的子进程,可能不止一个。僵尸进程指的是已经运行结束(即已经向父进程报告exit状态),但由于某种原因,进程描述符(PID)仍然处于进程列表中,PID无法被回收重用的进程。

OP2

Q: Linux是如何应对孤儿进程和僵尸进程的?管理员需要如何处理这两种进程?

** A:** 孤儿进程一旦出现,kernel的init进程就会成为它们的父进程,init会轮询每个进程的状态,并完成资源清理等善后工作。由于kernel会很好地处理孤儿进程,而且即便管理员强行杀死某个已经被init收养了的孤儿进程,init也会完成善后工作,所以,在不考虑程序本身逻辑的层面上,孤儿进程不存在需要管理员出面解决的危害。
而僵尸进程的存在会使得一个PID无法被复用,当PID超过上限(通常是32767,这个值可以更改)时,系统将无法为新进程分配PID,这就导致无法创建新进程。而且大量僵尸进程会填满你的进程列表,让你无法进行正常的管理。每一个进程在结束(发送exit状态)后,不会马上消失,而是都会处于僵尸状态,等待父进程进行资源清理和信息收集。出现僵尸进程堆积的根本原因是,父进程没有在收到exit后及时对子进程进行处理。所以,想终结僵尸进程,只需要杀死父进程,使得子进程成为孤儿进程,就可以由init进程进行善后。
在编程时,通常通过waitpid来处理子进程的SIGCHILD信号,也可以对子进程进行两次fork,这样,在第一层子进程结束后,第二层子进程就会成为孤儿进程,可以由init进行善后工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,301评论 0 23
  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,573评论 1 14
  • 【论语心得021】识人有术。观察一个人的人性品格有三个方法。视其所以,看他的动机,他为什么要做这个事。观其所由,他...
    国学应用讲习所阅读 186评论 0 0
  • 光阴似箭,我给女巫师奴役了好几个月。终于有一天,她在电线杆上的包小姐招聘信息旁找到了外地的一份工作,带着她的魔力扫...
    夹馅锅锅阅读 266评论 0 0
  • 感恩妈妈的对孩子们的关爱,马上新的月季就要开学,妈妈为了让孩子们在新的学期有新的成长和进步,专门请孩子们聚在一起吃...
    郑州豫昌鸿侯喜梅阅读 200评论 0 1

友情链接更多精彩内容