Найти тему
takoedelo

Что такое зомби-процессы в Linux и как их уничтожить

Оглавление

Зомби-процессы - это остатки закрытого программного обеспечения. Вот как зомби-процессы могут замедлять работу системы Linux и как их убить.

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

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

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

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

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

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

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

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

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

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

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

  • R: запущенный процесс
  • S: спящий процесс
  • D: непрерывный спящий процесс
  • T: завершенный процесс
  • Z: зомби-процесс

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

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

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

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

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

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

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

-2
-3

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

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

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

-4

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

-5

Уничтожение зомби-процессов с помощью команды kill

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

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

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

-6

Вывод:

-7

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

-8

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

-9

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

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

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

Смотрите другие статьи на нашем канале .

Структура каталогов Linux

Команда Linux, которую вам нужно знать

10 альтернативных операционных систем

Вы также можете оставить свое мнение об этом посте в разделе комментариев.