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

Каждая программа, которая выполняется в Linux, - это системный процесс, у которого есть свой идентификатор. Каждый процесс может запускать дочерние процессы с помощью функции fork. Такие процессы остаются под контролем родительского процесса и не могут быть завершены без его ведома. Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби.

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

Посмотреть такие процессы можно с помощью утилиты ps, здесь они отмечаются как defunct:

ps aux | grep defunct

Если вы попытаетесь убить такой процесс с помощью сигнала KILL, то ничего не выйдет:

Чтобы его завершить, нужно найти "родителя" этого процесса. Для этого используйте команду:

ps -xal | grep defunct

Здесь идентификатор родительского процесса находится в четвёртой колонке (PPID). Теперь мы можем послать ему сигнал завершения, и такого процесса в системе больше не будет:

kill -KILL 3990

Для большего удобства вы можете использовать утилиты top или htop, но принцип их действия будет аналогичным, поэтому я не буду здесь его рассматривать. Теперь вы знаете, что делать, если в вашей системе появились зомби процессы Linux.

6 комментариев

  1. Аватар serg 25 марта, 2020 Ответить
  2. Аватар Vlad 26 марта, 2020 Ответить
  3. Аватар Emergy 27 марта, 2020 Ответить
  4. Аватар Валентин 27 марта, 2020 Ответить
  5. Аватар Mars 28 марта, 2020 Ответить
  6. Аватар Марс 28 марта, 2020 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: