Autofaucets.ru - автоматический сборщик криптовалюты с кранов!

ЗОМБИ ПРОЦЕССЫ В ЛИНУКС. Что это значит, как с этим бороться и стоит ли.

Posted by Cooper Tue, 24 Feb 2009 20:09:00 GMT

Наверняка хоть раз многие задавали себе вопрос, глядя на выдачу команды ps ax, что это загадочные zombie процессы. Их пытаешься удалить (буквально убить) командой kill, но они остаются целыми и невредимыми.

10310 ?        Z      0:00 [php <defunct>]
10316 ?        Z      0:00 [php <defunct>]
10352 ?        Z      0:00 [php <defunct>]

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

[user1@www user1]$ 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 <defunct>]
0     0 10316 10301  15   0     0    0 -      Z    ?          0:00 [php <defunct>]

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

Posted in  | Tags , , , , , ,  | 3 comments

Comments

  1. Avatar Andrey said about 1 year later:

    Жить с этим не стоит так как зомбить блокируют записи в таблице процессов, а их размер не бесконечен для каждого пользователя. Достигнул лимит и программы не способны создавать новые дочерние процессы. В терминал тоже не попасть так как SH попытается создать еще один процесс, но не сможет. Так же не удастся выполнить какие-либо команды на уже открытой консоли. Как с ними бороться поподробнее можно :)

  2. Avatar Sergey said over 2 years later:

    Если процесс выполняется от суперюзера, то только рестарт поможет. Обычно при входе в консоль ОСь сама дает рекомендацию, как это исправить:

    => There is 1 zombie process.

    * System restart required *

  3. Avatar Сергей said over 2 years later:

    Как бороться? Я попробовал вот так. 1 - получить PID зомбированных процессов

    ps ax |grep Z

    1072 tty8 Ss+ 70:24 /etc/X11/X :0 vt8 -nr -nolisten tcp -auth /var/run/xauth/A:0-IeS7Zb 2455 ? Z 0:00 [chrome] 18241 ? Z 0:00 [chrome] 20297 pts/1 S+ 0:00 grep –color Z 30357 ? Z 0:00 [chrome] 32325 ? Ss 0:00 Z:\media\win_e2\Program Files\My Password Manager\mypass.exe
    32333 ? Sl 0:03 Z:\media\win_e2\Program Files\My Password Manager\mypass.exe Наборы цифр перед вопросительными знаками и есть то, что мне нужно. Имея идентификаторы процессов Зомби я могу завершить их в утилите TOP. 2 - ТОР

    top - 10:31:48 up 1 day, 15:32, 4 users, load average: 1.11, 1.16, 1.19Tasks: 244 total, 3 running, 238 sleeping, 0 stopped, 3 zombieCpu(s): 20.1%us, 34.7%sy, 0.2%ni, 44.7%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%stMem: 4059348k total, 3595516k used, 463832k free, 194624k buffersSwap: 4088504k total, 26604k used, 4061900k free, 984076k cached 3 - нажимаю клавишу К ввожу полученные идентификаторы зомбированных процессов 4 - ввожу команду kill Зомби умирают, как от серебра вампиры. Но, тут следует понимать можно использовать команды завершения или убийства процессов без вреда для родительского процесса, который может быть вполне работоспособным и нужным в данное время… Например в браузере на примере можно использовать собственный диспетчер задач, который позволяет управлять процессами самого браузера. Ещё можно использовать магические сочетания клавиш для завершения зомбированных процессов.

(leave url/email »)

   Comment Markup Help Preview comment