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

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

Что такое зомби-процессы?

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

Таблица процессов состоит из идентификатора процесса, ссылки на плату и другой полезной информации, связанной с процессом. У зомби-процессов есть собственные идентификаторы процессов и информация об управлении памятью. Поскольку ОС Linux имеет ограниченное количество доступных идентификаторов процессов, другие процессы не могут использовать идентификаторы PID, пока процесс-зомби не остановится.

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

Что вызывает зомби-процессы в Linux?

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

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

  1. Состояние процесса: Текущее состояние процесса
  2. Номер процесса: Уникальный номер, используемый для идентификации процесса.
  3. Счетчик команд: Содержит информацию, относящуюся к следующей инструкции.
  4. Регистры: Список всех регистров ЦП, используемых процессом
  5. Открыть список файлов: Файлы, используемые процессом
  6. Информация о расписании ЦП: Содержит информацию, связанную с процессорным временем и ресурсами, выделенными процессу.
  7. Информация об управлении памятью: Включает сведения об объеме памяти, используемой процессом.
  8. Информация о вводе / выводе: Список устройств ввода или вывода, используемых процессом.

Linux использует следующие состояния процессов для описания всех своих процессов.

  • р: Запущенный процесс
  • S: Процесс сна
  • D: Непрерывный спящий процесс
  • Т: Завершенный процесс
  • Z: Процесс зомби

Каждый раз, когда процесс завершает поставленную задачу, его состояние устанавливается как Зомби или же Z. У каждого процесса есть родительский процесс, который вызывает семейство функций с именем ждать() который ожидает изменения состояния процесса. Например, если состояние процесса меняется с Бег к Зомби, то ждать() метод будет запущен.

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

Но иногда из-за плохой разработки программы родительский процесс не вызывает ждать() функция. В результате система не удаляет плату зомби-процесса. Запись в таблице процессов для этого конкретного процесса также остается неизменной.

Это дает зомби-процессу бесконечную продолжительность жизни. Поскольку система не может убить процесс, запись процесса никогда не удаляется, и PID никогда не освобождается.

Учить больше: Способы убить не отвечающие программы в Linux

Как найти процессы зомби?

Первым шагом к удалению зомби-процессов в вашей системе является анализ того, какой процесс имеет Зомби состояние процесса. Хотя вы не сможете убить эти процессы напрямую, поскольку система уже удалила их из памяти, вы можете убить связанный с ними родительский процесс.

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

вершина

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

Вы можете перечислить информацию, относящуюся к этим зомби-процессам, по конвейеру команда ps с участием egrep. Egrep - это расширение команды grep в Linux, которая обрабатывает все шаблоны как расширенную строку регулярного выражения.

Связанный: Руководство по регулярным выражениям в Python для новичков

Введите следующую команду, чтобы вывести список всех зомби-процессов:

ps aux | egrep "Z | несуществующий"

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

Завершение процессов зомби с помощью команды kill

Теперь, когда вы знаете, какие зомби-процессы в настоящее время съедают ваши системные ресурсы, пришло время убить эти процессы.

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

Чтобы убить процессы-зомби, не выключая сервер, запишите идентификатор любого процесса-зомби. Из предыдущего раздела мы видим, что PID процесса зомби был 18614. Затем используйте этот PID, чтобы найти идентификатор родительского процесса.

пс -o ppid = -p 18614

Выход:

18613

Проверьте, существует ли идентификатор родительского процесса, используя пс команда.

ps -e | grep 18613

Теперь, когда мы подтвердили существование родительского процесса, пора его убить. Пройти -SIGKILL флаг с убийство команду следующим образом:

sudo kill -SIGKILL 18613

После того, как вы убили родительский процесс, система автоматически удалит зомби-процесс и удалит его из таблицы процессов.

Эффективное управление процессами в Linux

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

Если вы новичок в Linux и не знаете, как операционная система Linux управляет процессами, лучше всего начать с изучения процессов.

Электронное письмо
Что такое процесс в Linux?

Понимание процесса и заданий - ключевой аспект в освоении Linux. Вот что вам нужно знать.

Читать далее

Похожие темы
  • Linux
  • Linux
  • Обработка
Об авторе
Дипеш Шарма (Опубликовано 45 статей)

Дипеш - младший редактор Linux в MUO. Он пишет информационный контент в Интернете более 3 лет. В свободное время он любит писать, слушать музыку и играть на гитаре.

Ещё от Deepesh Sharma

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Еще один шаг…!

Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.

.