僵尸进程占用了 100% CPU

僵尸进程占用了 100% CPU

A僵尸进程不应使用任何资源(RAM 和 CPU),而是占用整个核心在我的 8 核 64 位 Ubuntu 11.10 桌面安装上。

这是输出ps -el|grep Z

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 Z  1000 10317     1 99  80   0 -     0 exit   ?        19:27:15 java <defunct>

...以下是摘录自top

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                
10317 deltik    20   0     0    0    0 Z  100  0.0   1170:17 java <defunct>
 1424 root      20   0  612m 193m 158m S   14  2.4 287:17.11 Xorg
12580 deltik    20   0  710m 135m  46m S    5  1.7  27:31.07 compiz

僵尸进程是这样​​产生的:

  1. 我打开了一个名为我的世界.jar。此启动器将另一个 JAR 文件下载到 ~/.minecraft/bin/minecraft.jar
  2. 当我用 锁定计算机时,该 JAR 正在执行xscreensaver
  3. 然后,我输入密码来解锁电脑,发现 Minecraft 窗口被冻结了。
  4. 我尝试用 杀死它(PID 10317)gnome-system-monitor。它变成了僵尸。
  5. kill -9 10317是无效的。
  6. xkill只关闭了标题为“Minecraft”的窗口;它没有关闭底层java进程。

相关信息:

  • 图形驱动程序是 FGLRX,并导致了臭名昭著的问题统一Ubuntu 11.04Ubuntu 11.10Xorg,包括有时和的CPU 使用率过高compiz

我想知道:

  1. 有什么方法可以java不重新启动就破坏这个过程吗(如果有的话)?
  2. 为什么会发生此问题?
  3. 我该怎么做才能防止这个问题再次发生?

答案1

该进程已重新设置为,因此应该被回收(否则,解决方案可能是终止其父进程)。根据字段,init它似乎卡在 中。exitWCHAN

它实际上可能正在执行某些操作(例如创建核心转储),这些操作会完成并自行消失。不幸的是,它可能由于驱动程序损坏而在内核中旋转,最终,您唯一的选择就是重新启动。

答案2

您试过了吗sudo kill -SIGCHLD 1?如果此方法无效,则需要重新启动系统。

更多内容:https://stackoverflow.com/questions/6335730/zombie-process-cant-be-killedhttps://serverfault.com/questions/89759/init-never-reaping-zombie-defunct-processes

答案3

僵尸进程已死亡但尚未被清理(正确的说法是“收割”),因此kill无法像正常进程那样对其进行操作。进程仍在进程表中,但当其为僵尸时,资源已被释放。

您可以尝试SIGCHLD向父进程发送信号,否则 init 应该会收到该信号并最终获得它。如果您想加快进程,只需重新启动即可。

答案4

这是一个内核错误。您是否使用 ecryptfs 来加密您的主目录?launchpad.net 上有一个关于此问题的错误报告。

相关内容