Как убить зомби-процесс в Ubuntu

155 прочитали

Зомби-процесс в Linux — это процесс, который завершился, но его запись все еще остается в таблице процессов. Это происходит из-за отсутствия связи между родительским и дочерним процессом. Обычно родительский процесс проверяет состояние своих дочерних процессов с помощью вызова wait(). Когда дочерний процесс завершается, он сигнализирует родительскому процессу о полном освобождении памяти. Однако, если главному процессу не получается вызвать wait() для какого-либо дочернего процесса, то такой процесс остается в системе, занимая ресурсы, но не принося никакой пользы. Такие процессы могут накапливаться в системе в больших количествах и  влиять на производительность. В таких случаях, необходимо будет вручную избавиться от таких процессов. А вот как это сделать и поговорим в этой статье.

Поиск зомби-процессов.

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

  • через графический интерфейс
  • через командную строку

Через графический интерфейс.

В главном меню системы ubuntu присутствует утилита Системный монитор

Зомби-процесс в Linux — это процесс, который завершился, но его запись все еще остается в таблице процессов. Это происходит из-за отсутствия связи между родительским и дочерним процессом.

Запустив это приложение, я нашел у себя в системе пару процессов zombie.

Зомби-процесс в Linux — это процесс, который завершился, но его запись все еще остается в таблице процессов. Это происходит из-за отсутствия связи между родительским и дочерним процессом.-2

Через командную строку.

Для того, чтобы определить процессы-зомби в командной строке, необходимо запустить команду top. Эта команда отображает информацию об используемой памяти и ресурсах ЦП. Кроме этого top сообщает нам о зомби-процессах. Давайте посмотрим как. Запускаем терминал и вводим команду top

$ top
Зомби-процесс в Linux — это процесс, который завершился, но его запись все еще остается в таблице процессов. Это происходит из-за отсутствия связи между родительским и дочерним процессом.-3

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

$ ps axo stat,ppid,pid,comm | grep -w defunct
Z+ 9449 9450 zombie <defunct>

Эта команда даст нам представление о состоянии, ID родительского процесса, идентификаторе процесса, программе, которая запустила процесс зомби ( в моем случае, она так и называется, специально для этого случая сделал). Флаг defunct говорит нам о том, что процесс не существует.

Завершение процесса-зомби.

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

Когда родительский процесс не может автоматически завершить процесс, то мы должны сделать это вручную. Сделать это можно командой SIGCHOLD. Если это не сработает, то можно убить родительский процесс, это завершит все дочерние процессы.

С помощью графического интерфейса.

Вы можете убить зомби процесс с помощью утилиты системный монитор. Для этого необходимо выбрать необходимый процесс правой кнопкой и выбрать пункт Убить

Зомби-процесс в Linux — это процесс, который завершился, но его запись все еще остается в таблице процессов. Это происходит из-за отсутствия связи между родительским и дочерним процессом.-4

Процесс будет удален из вашей системы.

С помощью командной строки.

После того, как вы узнали, что в вашей системе запущены какие-то зомби-процессы и узнали их идентификационный номер, можно попробовать для начала использовать команды SIGCHLD следующим образом

$ kill -s SIGCHLD PID

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

$ sudo kill -9 PPID

Когда уничтожите все зомби процессы, запустите top и проверьте, что больше ничего не мешает системе создавать новые процессы.

Заключение.

Вот и добавилось в копилку навыков еще одно умение. Надеюсь кому-то пригодится.

А если Вам понравилась статья, то подписывайтесь на мой канал дзен (кнопка ниже), либо в telegramm и ВКонтакте. Так же не забудьте про мой сайт RoadIT, в котором я потихоньку собираю материал, знание которого приведет вас в мир IT.