Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1603747
  • 博文数量: 695
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4027
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 21:22
文章分类

全部博文(695)

文章存档

2018年(18)

2017年(74)

2016年(170)

2015年(102)

2014年(276)

2013年(55)

分类: C/C++

2015-10-26 16:17:01

一直对这个概念记不清楚,今天又重新温习了下相关知识,又有些新的收获
僵尸进程危害场景:

  例如有个进程,它定期的产 生一个子进程,这个子进程需要做的事情很少,做完它该做的事情之后就退出了,因此这个子进程的生命周期很短,但是,父进程只管生成新的子进程,至于子进程 退出之后的事情,则一概不闻不问,这样,系统运行上一段时间之后,系统中就会存在很多的僵死进程,倘若用ps命令查看的话,就会看到很多状态为Z的进程。 严格地来说,僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程。因此,当我们寻求如何消灭系统中大量的僵死进程时,答案就是把产生大 量僵死进程的那个元凶枪毙掉(也就是通过kill发送SIGTERM或者SIGKILL信号啦)。枪毙了元凶进程之后,它产生的僵死进程就变成了孤儿进 程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源,这样,这些已经僵死的孤儿进程 就能瞑目而去了。


首先要明白每个子进程结束后都会经历僵尸进程的过程,如果父进程能够 及时处理我们用PS命令就看不到Z状态的进程了,所以搞清楚父进程与子进程之间的结束关系就能很轻松的掌握僵尸进程和孤儿进程了:

一、当父进程先结束,子进程还在运行,这时候就会产生孤儿进程;不过所有的孤儿进程都会有PID为1的init进程进行处理,所有不会产生什么危害
二、当子进程结束了,父进程还在运行的时候,这时候要看父进程中的处理措施,如果父进程对自己产生的子进程都做相应的处理(wait)那么就不会出现僵尸进程的危害,如果父进程只管产生子进程,不做相应的处理措施,这样当子进程结束后,附近还在运行,但是没有对子进程进行相应的清理,最终就会造成僵尸进程长期存在,解决的办法就是kill掉父进程

阅读(865) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~