Каждая программа, которая выполняется в Linux, - это системный процесс, у которого есть свой идентификатор. Каждый процесс может запускать дочерние процессы с помощью функции fork. Такие процессы остаются под контролем родительского процесса и не могут быть завершены без его ведома. Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби.
Зомби процессы Linux не выполняются и убить их нельзя, даже с помощью sigkill, они продолжают висеть в памяти, пока не будет завершён их родительский процесс.
Посмотреть такие процессы можно с помощью утилиты ps, здесь они отмечаются как defunct:
ps aux | grep defunct
Если вы попытаетесь убить такой процесс с помощью сигнала KILL, то ничего не выйдет:
Чтобы его завершить, нужно найти "родителя" этого процесса. Для этого используйте команду:
ps -xal | grep defunct
Здесь идентификатор родительского процесса находится в четвёртой колонке (PPID). Теперь мы можем послать ему сигнал завершения, и такого процесса в системе больше не будет:
kill -KILL 3990
Для большего удобства вы можете использовать утилиты top или htop, но принцип их действия будет аналогичным, поэтому я не буду здесь его рассматривать. Теперь вы знаете, что делать, если в вашей системе появились зомби процессы Linux.
спасибо, еще можно также родителей смотреть ps -ef | grep defunct
Годная статья, в отличие от остального мусора перепечатываемого из года в год с завидной регулярностью
Статья ни о чем. Где к примеру информация о том, как бороться с зомби, если к примеру багнутый сервис в продакшене, который плодит зомби на столько что кончаются PID'ы, надо как минимум до утра каким-то образом удержать на плаву, но прибивать сервис нельзя? Нет информации о том, что зомби это часть жизненного цикла любого процесса.
не согласен!
Проверил на FREEBSD работает!
Скажите почему после обновления программ и системы после перезагрузки висит все если даже и зашел после смены дров на другие не тест система дохнет???Не грузится заходишь рекавери через загрузку все падает .Ебался 1 неделю с xubuntu видимо кривая сборка скачал другую не сменить окружение не рабочий стол тупо виснет ПОЧЕМУ???? ASUSN56JRH SSD 256 gb Озу16 gb ставил рядом с 10 кой
Ставил xubuntu, lubuntu, ubuntu их разрядности с разным окружением ВЕЗДЕ ПРЕТ ТИРИНГ НЕ УБИВАЕТСЯ НИЧЕМ....про смену дров молчу делал конечно только ubuntu 18.04 без него НО сожрала 10 озу за 2 дня Еще ubuntu studio без тиринга ТОЛЬКО НЕ СТАВИТСЯ РУГАЕТСЯ НА ДИСК где скачать не конченный дистр остальное ВСЕ ПОЛНОЕ ГАВНО ЛИБО ВИСНЕТ ЛИБО ДОХНЕТ осталось минт прощупать
Эта строка убьёт всех зомби....
ps -xal | grep defunct | awk '{ system (" kill -9 " $4 ) }'
Что значит: "Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби." Следуя логике этого сообщения, то дочерний процесс уже завершился, а если он завершился, то как он будет зомби, если его уже нет ?
ресурсы освободил, но запись о его pid должен удалить родитель и соотвественно сам pid высвободить