【如何彻底杀死子进程】Kill -9子进程后进程呈僵死状态

dongpy 2009-02-12 03:43:10
应用程序中,父进程A创建子进程B,C,然后要Kill子进程,kill(pid,SIGKILL)。

发现Kill后,子进程呈僵死状态,没有完全清除,子进程各个线程的PID也没有释放。

这样,操作多次后(反复创建和杀死),不能创建任何进程,系统提示“sh:Cannot fork”。

请问该如何彻底Kill子进程,还是我的这个系统有问题?
...全文
1288 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
erigido 2009-02-13
  • 打赏
  • 举报
回复
呵呵~~~,你这个多次也太多了吧,僵尸进程占用的资源极少,除了PCB未释放。

个人比较偏向于7楼的建议,在SIGCHLD信号里进行wait操作。
ewuby 2009-02-13
  • 打赏
  • 举报
回复
kill 父进程
快乐田伯光 2009-02-13
  • 打赏
  • 举报
回复
在SIGCHLD信号里进行wait操作,就可以避免僵死进程
playmud 2009-02-12
  • 打赏
  • 举报
回复
是当时父进程阻塞了,没有去处理子进程的退出信号,就成了僵死进程。
dongpy 2009-02-12
  • 打赏
  • 举报
回复
测试了SIGCHLD和SIGCLD:

父进程A,Kill子进程B,A没有收到这两个信号。
忽略这两个信号,也没用。
帅得不敢出门 2009-02-12
  • 打赏
  • 举报
回复
有关更多僵尸进程信息请查阅其它资料
比如:http://baike.baidu.com/view/758736.html
帅得不敢出门 2009-02-12
  • 打赏
  • 举报
回复
这个是所谓的zombie(僵尸进程)
引用一段:
在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
  僵尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程.(zombie)进程
dongpy 2009-02-12
  • 打赏
  • 举报
回复
问题是父进程A,要Kill子进程B。
linaxing 2009-02-12
  • 打赏
  • 举报
回复
把子进程的父进程杀死就可以了。因为子进程退出后要等到其父进程调用wait后,该进程项才会从进程表里面删除。

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧