Зомби-процессы - это остатки закрытого программного обеспечения. Вот как зомби-процессы могут замедлять работу системы Linux и как их убить.
Зомби-процесс. Не все слышали об этом интересном, но страшном слове, связанном с операционной системой Linux. На персональном компьютере процессы-зомби могут не представлять угрозы для обычного пользователя, но когда дело доходит до серверов Linux, эти процессы должны быть идентифицированы и остановлены.
Такие процессы могут вызвать проблемы с таблицей процессов вашей системы и, в свою очередь, нарушить надлежащее функционирование вашего компьютера. Поэтому в этой статье мы подробно обсудим зомби-процессы, а также подробное руководство по поиску и уничтожению зомби-процессов на машине Linux.
Что такое зомби-процессы?
Но прежде всего важно, чтобы вы знали, что такое зомби-процессы на самом деле. Это не что иное, как мертвые и несуществующие процессы, которые занимают место в таблице системных процессов.
Таблица процессов состоит из идентификатора процесса, ссылки на печатную плату и другой полезной информации, связанной с процессом. Процессы-зомби имеют свои собственные идентификаторы процессов и информацию об управлении памятью. Поскольку ОС Linux имеет ограниченное количество доступных идентификаторов процессов, другие процессы не могут использовать PID, пока процесс-зомби не остановится.
Хотя один или два зомби-процесса не вызовут никаких сбоев или проблем с производительностью на вашем компьютере, большое количество таких процессов может нанести вред рабочему процессу вашей системы, затопив таблицу процессов и ресурсы.
Что вызывает зомби-процессы в Linux?
Чтобы детально понять основную причину процесса-зомби, вам нужно узнать, как процессы запускаются и останавливаются в Linux. Операционная система Linux отслеживает все запущенные процессы и демоны на компьютере. Таблица процессов - это список структур, который содержит все процессы, которые в данный момент выполняются на вашем компьютере.
Каждая запись процесса в таблице процессов состоит из ссылки на блок управления процессом этого конкретного процесса. Хранятся все детали, связанные с этим конкретным процессом. Эти сведения включают:
- Состояние процесса: текущее состояние процесса
- Номер процесса: уникальный номер, используемый для идентификации процесса
- Счетчик программ: содержит информацию, относящуюся к следующей инструкции
- Регистры: список всех регистров процессора, используемых процессом
- Список файлов: файлы, используемые процессом
- Информация о расписании процессора: содержит информацию, связанную с процессорным временем и ресурсами, выделенными процессу
- Информация об управлении памятью: включает сведения об объеме памяти, используемой процессом
- Информация о вводе / выводе: список устройств ввода или вывода, используемых процессом
Linux использует следующие состояния процесса для описания всех своих процессов.
- R: запущенный процесс
- S: спящий процесс
- D: непрерывный спящий процесс
- T: завершенный процесс
- Z: зомби-процесс
Всякий раз, когда процесс завершает поставленную задачу, его состояние процесса устанавливается как Zombie или Z. У каждого процесса есть родительский процесс, который вызывает семейство функций с именем wait(), которые ожидают изменения состояния процесса. Например, если состояние процесса изменится с запущенного на Зомби, будет запущен метод wait().
Метод wait () обычно удаляет блок управления процессом, связанный с этим зомби-процессом, а затем удаляет запись этого процесса из таблицы процессов.
Но иногда из-за плохой разработки программы родительский процесс не вызывает функцию wait() . И в результате система не удаляет процесс зомби. Запись в таблице процессов для этого конкретного процесса также остается неизменной.
Это дает процессу зомби бесконечный срок службы. Поскольку система не может убить процесс, запись процесса никогда не удаляется, а PID никогда не освобождается.
Как найти зомби-процессы?
Первым шагом к удалению процессов-зомби в вашей системе является анализ того, какой процесс имеет состояние процесса-зомби. Хотя вы не сможете убить эти процессы напрямую, поскольку система уже удалила их из памяти, вы можете убить родительский процесс, связанный с ними.
Во-первых, вам нужно проверить, есть ли в таблице процессов вашей системы зомби-процесс. Вы можете сделать это легко, используя команду top . Просто откройте свой терминал и введите:
Вы увидите результат, похожий на этот. Обратите внимание на количество зомби-процессов в верхней части окна терминала. Если результат равен нулю, то вам не о чем беспокоиться.
Вы можете посмотреть информацию, связанную с этими зомби-процессами, передав команду ps с помощью egrep . Egrep - это расширение команды grep в Linux, которая обрабатывает все шаблоны как расширенную строку регулярных выражений.
Введите следующую команду, чтобы перечислить все зомби-процессы:
Вышеупомянутая команда будет искать строки, содержащие либо Z, либо defunct в выходных данных, сгенерированных командой ps. Вывод состоит из списка зомби-процессов, запущенных в вашей системе.
Уничтожение зомби-процессов с помощью команды kill
Теперь, когда вы знаете, какие зомби-процессы в настоящее время поглощают ваши системные ресурсы, пришло время убить эти процессы.
Хотя самый простой способ убить зомби-процессы - перезагрузить компьютер, иногда это неосуществимый вариант, особенно если вы администрируете сервер.
Чтобы убить зомби-процессы, не отключая сервер, запишите идентификатор процесса любого зомби-процесса. Из предыдущего раздела мы видим, что PID зомби-процесса был 18614. Затем используйте этот PID, чтобы найти идентификатор родительского процесса.
Вывод:
Проверьте, существует ли идентификатор родительского процесса, используя команду ps.
Теперь, когда мы подтвердили существование родительского процесса, пришло время его убить с помощью команды kill следующим образом:
Как только вы убьете родительский процесс, система автоматически удалит зомби-процесс и удалит его из таблицы процессов.
Эффективное управление процессами в Linux
Каждый системный администратор должен уделять приоритетное внимание процессам мониторинга, запущенным на компьютере с Linux. Хотя зомби-процессы не обязательно вредны для вашей системы, они могут вызвать проблемы с производительностью, если они существуют в большом количестве.
Смотрите другие статьи на нашем канале .
Структура каталогов Linux
Команда Linux, которую вам нужно знать
10 альтернативных операционных систем
Вы также можете оставить свое мнение об этом посте в разделе комментариев.