LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1093|回复: 7

有关僵死进程:help

[复制链接]
发表于 2004-4-2 09:17:35 | 显示全部楼层 |阅读模式
我fork了一个进程,然后在这里面使用execv来执行一个java程序.在执行的过程中我给这个子进程发送SIGKILL信号.但是唯一的结局是把这个进程搞成了僵死进程.没有杀掉.请问为什么?怎么才能杀掉这个子进程? :confused:
发表于 2004-4-2 09:47:38 | 显示全部楼层
这个子进程已经被kill掉了。你要避免僵死进程,需要在父进程里面处理SIGCHLD信号
 楼主| 发表于 2004-4-2 10:47:56 | 显示全部楼层
谢谢.theseus
在父进程中处理SIGCHLD信号?怎么做才能杀死那个僵死的进程呢
发表于 2004-4-2 11:09:48 | 显示全部楼层
在父进程收到SIGCHLD信号后再退出。
发表于 2004-4-4 19:37:29 | 显示全部楼层
在父进程里截取或忽略SIGCHID 。

用 wait(); 就挂起等待。

或用 signal(SIGCHID,fun) 来处理此信号;fun 为信号处理函数
发表于 2004-4-5 02:59:17 | 显示全部楼层
zombie state 很多时候是发生在一个parent和多个children in parallel的情况下的(以前自己作个minishell的时候会有这种状况)。。一个parent和一个child的情况下用if(fork() == 0){...exit();} else{....exit()}的结构是会自动结束child, 之后在结束parent, 而不会产生zombie的。。为什么要用sigkill来手动杀呢?
发表于 2004-4-5 15:20:59 | 显示全部楼层
在父子进程不同步的情况下,只要父进程在子进程之前结束,子进程都有可能变成zombie。
发表于 2004-4-6 13:32:37 | 显示全部楼层
unix高级环境编程有一节这么写的
大概好象是这个意思
在子进程结束后,很多系统资源没有被回收,要处理这些资源使之能被其他进程使用就要使用wait或者waitpid函数来处理掉这些僵尸进程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表