免费注册 查看新帖 |

Chinaunix

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

有没有遇到进程杀不死的时候。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-05 15:43 |只看该作者 |倒序浏览
刚刚杀一个进程,怎么都杀不死。。

那个进程是在eclipse调试的时候gdb开启的,后来调试了一段时间结束debug的时候发现eclipse没把它(叫test.exe)关闭。
那只能关闭eclipse了,eclipse是被关闭了,但是ps查看发现那个test.exe还是在那。
kill -9也杀不死。。
ps查看发现STAT为T,Stopped状态。。
火大,它现在依旧还活着。。

论坛徽章:
0
2 [报告]
发表于 2009-01-05 15:52 |只看该作者

进程为什么杀不死。。

当进程处于STOP状态,无法接收kill -9,所以杀不死。。



[ 本帖最后由 langue 于 2009-1-5 15:56 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-01-05 16:00 |只看该作者
D状态?只有D状态的才不能接收信号吧?太多D状态就是内核出问题了。

论坛徽章:
0
4 [报告]
发表于 2009-01-05 16:02 |只看该作者
后来我给进程发了kill -s CONT,它就死了。。

论坛徽章:
0
5 [报告]
发表于 2009-01-05 16:43 |只看该作者
把信号都屏蔽了

论坛徽章:
0
6 [报告]
发表于 2009-01-05 17:51 |只看该作者
有2个信号是屏蔽不了的,其中一个就是9。
我也碰到过杀不死的情况,而且还是好几个进程,后来没办法就重启了。

论坛徽章:
0
7 [报告]
发表于 2009-01-05 19:03 |只看该作者
原帖由 eveson 于 2009-1-5 16:43 发表
把信号都屏蔽了


肯定不对。

1、有2个信号是肯定屏蔽不了的,最重要的一个就是SIG_KILL。
2、如果屏蔽了,那那个SIG_CONT发来他就不会真的“挂”了。

我的理解是这样的,这个进程出于“被”调试状态,或者算是traced的状态。他可能处在某个断点处,等待调试器与其交互。但是这个时候调试器被LZ搞挂了,所以当前进程更多的应理解为pause状态(虽然操作系统里没这概念),而此时如果收不到相应的信号让其变为就绪状态他是不可能继续动的。所以此时发给他KILL信号,也只是更新了该进程对应的信号栈罢了,他还是不会被调度到。所以不死。
但是LZ发给他一个SIG_CONT信号,他误以为是调试器让其继续往下走,一走不要紧,发现-9信号来了,直接退出。

不知道是不是这样。

论坛徽章:
0
8 [报告]
发表于 2009-01-05 19:09 |只看该作者

回复 #7 samon_fu 的帖子

也不算对,LZ可以试试发个-9信号过去,他当时不死,你等一会看过一会后他死不死。

按照SIG_KILL的处理流程,也只是改变进程的当前状态,释放些资源,向父进程发送SIG_CHILD,由其老爹来收尸罢了。只是此处的父进程应该变成了init了。

论坛徽章:
0
9 [报告]
发表于 2009-01-05 19:35 |只看该作者
原帖由 samon_fu 于 2009-1-5 19:09 发表
也不算对,LZ可以试试发个-9信号过去,他当时不死,你等一会看过一会后他死不死。

按照SIG_KILL的处理流程,也只是改变进程的当前状态,释放些资源,向父进程发送SIG_CHILD,由其老爹来收尸罢了。只是此处的 ...


我当初kill -9后,应该过了有20~30分钟了吧,系统当时负载也不高,我想可能如你7楼分析的那样吧~

论坛徽章:
0
10 [报告]
发表于 2009-01-06 11:44 |只看该作者
我遇到过另外一种情况

不是进程不能杀死,而是父进程受到sigchd后,会再次fork一个子进程


不过这种情况,pid会变的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP