Как найти и убить зомби О_О

Зомби-процесс в unix - системах - дочерний процесс, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения.

Они не используют системные ресурсы, не занимают память, но блокируют записи в таблице процессов, размер которой ограничен для каждого пользователя и системы в целом.

На самом деле зомби уже уничтоженные процессы. А, как известно, нельзя убить дважды :). Ранее для них уже была выполнена команда kill, но, по разным причинам, она не смогла завершиться завершением процесса. Он остается формально существующим, но ресурсы, отведенные для него, на самом деле, освобождаются.

Причина существования zombie процессов заключается в том, что родительский процесс может запросить статус завершения или затребовать статистику использования ресурсов порожденного зомби. В случае, если процесс-родитель не нуждается больше в зомби, он сигнализирует об этом операционной системе с помощью вызова системной функции wait().

В нормальной ситуации, когда процесс завершается, все его child processes становятся наследниками init, PID которого равен 1. Init всегда ждёт завершения child processes, для того, чтобы избежать порождения зомби. Если всё же в вашей системе завелись зомби, это означает, что они не обслуживают более свои родительские процессы (определить, кстати, которые можно командой ps -lax, колонка PPID):

[gnusu@www gnusu]$ ps -lax
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
0     0 10302     1  15   0 29420 8132 -      S    ?          0:06 /usr/local/bin/ruby /var/www/site/public/dispatch.fcgi
0     0 10310 10302  15   0     0    0 -      Z    ?          0:00 [php ]
0     0 10316 10301  15   0     0    0 -      Z    ?          0:00 [php ]


а эта команда отображает их PID:

# ps aux | awk '{ print $8 " " $2 }' | grep Z


но убить зомби-процессы через стандартный kill -9 нельзя, так как они не принимают никаких сигналов. Убить их можно только завершив родительский процесс.

В этом случае у вас есть три варианта: (1) исправить процесс родитель; (2) убить его; (3) или продолжать жить с этим. Надо заметить, что жить с этим не так уж и сложно, поскольку зомби - это всего лишь дополнительная строчка в выдаче команды ps .

Cheerz...