12

Процесс зомби, который не должен использовать какие-либо ресурсы (RAM и CPU), загружает все ядро на моей 8-ядерной 64-битной установке Ubuntu 11.10 Desktop.

Это вывод команды 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. Я открыл Java JAR под названием minecraft.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, и он вызвал пресловутые проблемы с Unity of Ubuntu 11.04 и Ubuntu 11.10, включая иногда высокую загрузку ЦП Xorg и compiz .

Я хочу знать:

  1. Какой способ уничтожить этот процесс java без перезапуска, если таковой имеется?
  2. Почему эта проблема происходит?
  3. Что я могу сделать, чтобы эта проблема не повторилась?

4 ответа4

8

Процесс уже переписан для init , поэтому его нужно пожинать (иначе, скорее всего, решение будет убить его родителя). Похоже, что застрял на exit , на основе поля WCHAN .

На самом деле он может что-то делать (например, создавать дамп ядра), который закончится и сам уйдет. К сожалению, он, вероятно, вращается в ядре из-за сломанного драйвера и, в конечном счете, единственным вариантом будет перезагрузка.

5

Вы пробовали sudo kill -SIGCHLD 1? Если это не работает, вам нужно перезагрузить систему.

Подробнее об этом: https://stackoverflow.com/questions/6335730/zombie-process-cant-be-killed и https://serverfault.com/questions/89759/init-never-reaping-zombie-defunct-processes

4

Процессы зомби умерли, но еще не были очищены («пожинать» - правильный термин), и поэтому kill не работает с ними, как обычный процесс. Процесс все еще находится в таблице процессов, но когда он является зомби, ресурсы распределяются.

Вы можете попытаться отправить сигнал SIGCHLD родителю процесса, в противном случае init должен был бы поднять его и в конце концов пожнет его. Если вы хотите ускорить процесс, вы можете просто перезагрузиться.

1

Это ошибка ядра. Вы используете ecryptfs для шифрования вашего домашнего каталога? Об этом сообщается об ошибке на launchpad.net.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .