免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2334 | 回复: 2
打印 上一主题 下一主题

僵尸进程能够被杀死吗? [复制链接]

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-23 11:55 |只看该作者 |倒序浏览
关于僵尸进程,是不是不同的系统会有较大的差别啊?
Unix编程/应用问答中文版 --- 13.进程相关问题有如下说法:
原帖由 "小四" 发表:

在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。
补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。


可是,我遇到的情况令我觉得很奇怪:
因为怀疑进程A存在问题,所以对其进行观察。
启动进程A,稍后查看系统中僵尸进程的情况

  1. $ps -ef |grep defunct
  2. feeling 25485 13812  0                   0:00 <defunct>;
复制代码

继续查看,发现该僵尸进程的父进程ID<13812>;对应的进程就是A。
奇怪的是,稍后再次查看时,该僵尸进程已消失,而其父进程A依然健在

  1. $ps -ef |grep defunct
  2. feeling  3334 18555  0 11:40:42 pts/4    0:00 grep defunct
复制代码

很是令人费解啊!
进程A里面是做了waitpid的处理的,难道说在这种情况下也是会出现僵尸进程的,而该僵尸进程还是可以由其父进程“回收”的?
那这样的话,“僵尸进程”这个名字是否还能够反应其实质呢?

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
2 [报告]
发表于 2004-09-23 12:10 |只看该作者

僵尸进程能够被杀死吗?

对了,补充一下系统环境:

  1. $uname -a
  2. SunOS sr-bu 5.8 Generic_108528-29 sun4u sparc SUNW,Sun-Fire-880
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-09-24 16:49 |只看该作者

僵尸进程能够被杀死吗?

试试在程序开始时加入以下代码:
  1.   signal(SIGCLD,SIG_IGN);  /* ignore death child process */
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP