免费注册 查看新帖 |

Chinaunix

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

[C] 僵尸进程求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-26 22:15 |只看该作者 |倒序浏览
场景:

sys_man_daemon是守护进程父进程,他下面有三个子进程:sys_green,sys_dev,sys_perf;这三个子进程都由sys_man_daemon守护,时刻保持这三个子进程处于运行状态;

问题:当系统升级的时候,需要所有的项目进程停止,如果我先干死sys_green,sys_dev,sys_perf会不成功,因为sys_man_daemon会立马拉起这三个进程,如果先干死父进程sys_
man_daemon,问题就来了,sys_green、sys_dev、sys_perf三个子进程时不时会有出现僵尸进程的情况。



请问各位有什么好办法对付,网上搜索了不少资料,不知道SIGCHLD信号代码加在哪里,wait,waitpid又加在哪里呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2011-06-26 23:04 |只看该作者
先杀父进程怎么就会有僵尸进程呢?
你可以先杀父进程,然后杀子进程嘛。

论坛徽章:
0
3 [报告]
发表于 2011-06-26 23:11 |只看该作者
现在确实就是这么操作的  但是  确实是产生了  按理说不会的  但是就是产生了

父进程是个守护进程

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
4 [报告]
发表于 2011-06-27 10:26 |只看该作者
现在确实就是这么操作的  但是  确实是产生了  按理说不会的  但是就是产生了

父进程是个守护进程
kingwolf520 发表于 2011-06-26 23:11



先杀父再杀了子?还有僵尸?

sleep(2)试试

论坛徽章:
0
5 [报告]
发表于 2011-06-27 16:03 |只看该作者
老大,你说详细点,为什么还有这个问题,为什么要加sleep(2),加在哪,为什么这么加?

我的理解是加在父进程代码末行,要父进程临死之前再等等子进程?

按照课本是父守护进程死后是init接管无父的子进程,这样不至于出现僵死进程,但是如果子进程不正常退出呢?init还能正常处理这个异常退出的子进程吗?

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
6 [报告]
发表于 2011-06-27 16:46 |只看该作者
回复 5# kingwolf520


父进程先死,不管正常还是不正常退出 init 都会接管。我说加sleep是猜你在刚杀掉子进程 init 还没来得及回收的时候就做了与僵尸有关的事,在这里sleep一下等 init 回收了再做可能就ok了。如果不是这样的情况,那请楼主解释:你如何判断的先杀父再杀子 init 没有回收子?init 一直不回收的情况基本不存在吧

论坛徽章:
0
7 [报告]
发表于 2011-06-27 17:18 |只看该作者
嗯,不急,慢慢来   

你猜得没错,我杀死父进程后立马来了一串命令干死其后的三个子进程,然后就悲剧了撒……

你的sleep要加在杀死子进程后停留一下吗?貌似也有道理。

我这边杀死父进程后ps了一下,父进程没了,子进程发现有僵尸进程。

感谢回复,请你再帮我出出主意,搜索不到啥好资料好方法。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
8 [报告]
发表于 2011-06-27 20:35 |只看该作者
回复 7# kingwolf520


你杀死父进程并且干掉子进程后等一小下再ps试试,还有僵尸?你用什么杀的?kill发信号?发的啥信号?信号有的是挂起不是杀死,查下手册哈~

论坛徽章:
0
9 [报告]
发表于 2011-06-29 17:42 |只看该作者
killall sys_daemon
killall sys_business
killall sys_dev
killall sys_perf
killall sys_green

pkill -9 sys_daemon   
pkill -9 sys_perf     
pkill -9 sys_dev
pkill -9 sys_business
pkill -9 sys_green





原来是这个样子的   老兄有啥好主意办法?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2011-06-29 22:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP