Зомби процессы в Linux.

Думаю не ошибусь, если предположу что вы так же как и я иногда задавались вопросом при выводе комадны терминала ps ax, а именно Z процессы.

2851 ? Z 0:00 [gksu]

Что же это все же за зомби процессы такие? Причем при попытке их убить командой kill они остаются такими же невредимыми???!! Что же с ними делать?

Зомби
Dante

В реальности, все не так просто. Точнее просто, но не так как на первый взгляд. Дело в том что, зомби, это уже уничтоженные процессы. Сами понимаете что ничего не получится убить дважды, бессмысленно убивать то что уже мертво.

Для данных процессов уже была выполнена команда kill, убить. Только вот по различным причинам, данная команда не смогла завершится, нормальным завершением процесса. Собственно, здесь получается неоднозначная ситуация, формально если смотреть, то процесс продолжает существовать, а вот ресурсы которые отведены под него, в реальности освобождаются.

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

В случае с нормальной ситуацией завершения процесса, все его порожденные процессы становятся наследниками init, PID которого единица. Init всегда ожидает завершения всех порожденных процессов, это как раз и сделано для того чтобы избежать порождения зомби процессов.

Если же в системе завелись зомби процессы, тогда это означает что они более не обслуживают родительские процессы, определить которые вы можете командой ps -lax, в колонке PPID.

0 1000 2851 1639 20 0 0 0 exit Z ? 0:00 [gksu]

Что же Вам делать в этом случае? По сути дела вариантов у Вас собственно три.
А собственно:
1. Исправить родительский процесс
2. Убить родительский процесс
3. Продолжать с этим жить.

Что в обычных ситуациях не так сложно, зомби обычно не мешают самой работе. Хотя бывают и более надоедливые ситуации.

Это заключается в том что процессы зомби блокируют записи в таблице процессов, а этот размер не бесконечен. В том случае если станет достигнут лимит, программы более не смогут создавать дочерние процессы, Вы не сможете попасть ни в терминал, ни выполнить какие-либо команды в уже открытой консоли. Такое у меня раз было. Но это не совсем обычная ситуация, не знаю, мне тогда только reboot помог.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *