2

我正在运行一个实验性的 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 

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

4

1 回答 1

8

wait(2) 手册页告诉您:

终止但没有等待的孩子成为“僵尸”。内核维护有关僵尸进程的最小信息集(PID、终止状态、资源使用信息),以便允许父进程稍后执行等待以获取有关子进程的信息。只要僵尸没有通过等待从系统中移除,它就会消耗内核进程表中的一个槽,如果这个表填满,就不能再创建更多的进程。如果父进程终止,则它的“僵尸”子进程(如果有)将被 init(8) 采用,它会自动执行等待以移除僵尸进程。

所以你必须寻找你的僵尸的进程 ID 并杀死它们。然后init将埋葬你的僵尸。为此ps -fpstree会帮助你。

于 2012-09-25T17:47:49.223 回答