杀死一个java僵尸进程

时间:2012-09-25 17:26:33

标签: linux kill-process zombie-process

我正在运行一个实验性的java应用程序,每次我杀死或停止应用程序时,都会创建僵尸进程。我知道僵尸并不是真正的问题,因为他们(据说)不会消耗资源。但是,我的RAM可用空间明显少于应有的空间。这是

的转储
ps aux | grep java

3052  8.5  0.0      0     0 ?        Zl   Sep24 127:24 [java] <defunct>
6644  0.9  0.0      0     0 ?        Zl   Sep24  13:20 [java] <defunct>
8325  0.7  0.0      0     0 ?        Zl   Sep24  11:01 [java] <defunct>
8954  0.7  0.0      0     0 ?        Zl   Sep24  11:01 [java] <defunct>
16229  1.3  0.0      0     0 ?        Zl   Sep24  16:57 [java] <defunct>
19222  106  0.0      0     0 ?        Zl   Sep24 1346:37 [java] <defunct>

以下任何一项都不起作用:(

kill -9 PID , kill -1 PID, kill -KILL PID 

我无法重启我的机器!所以我非常欢迎任何解决方案。

1 个答案:

答案 0 :(得分:8)

wait(2)手册页告诉你:

  

终止但尚未等待的孩子成为“僵尸”。内核维护有关僵尸进程(PID,终止状态,资源使用信息)的最小信息集,以便允许父进程稍后执行等待以获得关于子进程的信息。只要没有通过等待从系统中删除僵尸,它就会占用内核进程表中的一个插槽,如果该表填充,则无法创建进一步的进程。如果父进程终止,则它的“僵尸”子进程(如果有的话)被init(8)采用,它会自动执行等待删除僵尸。

因此,您必须查找僵尸的进程ID并将其杀死。然后init将埋葬你的僵尸。对于此ps -fpstree会对您有帮助。