孤儿进程与僵尸进程详解

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

僵尸进程危害:如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。

已经产生的僵尸进程,解决方法:kill掉父进程,它产生的僵尸进程就变成了孤儿进程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源。

僵尸进程解决办法
  (1)通过信号机制
    子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait或waitpid进行处理僵尸进程。
  (2)fork两次
    《Unix 环境高级编程》8.6节说的非常详细。原理是将僵尸进程成为孤儿进程,从而使其的父进程变为init进程,通过init进程可以处理僵尸进程。

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

相关阅读更多精彩内容

  • 我们知道在unix/linux中,子进程的结束和父进程的运行是一个异步过程, 当一个进程完成它的工作终止之后,它的...
    丶Em1tu0F阅读 987评论 0 3
  • 转自:http://www.cnblogs.com/Anker/p/3271773.html 1、前言 之前在看《...
    Daniel521阅读 429评论 0 1
  • 基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结...
    01_小小鱼_01阅读 331评论 0 0
  • 孤儿进程与僵尸进程[总结] 1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直...
    徐德东阅读 261评论 0 0
  • 反秦归项九江王,游说叛羽即刘邦。 功高便去王侯命,鸟尽藏弓走狗亡。 【2016,2,21。三古月南】 【QQ:15...
    三古月南阅读 183评论 0 0

友情链接更多精彩内容