Зомби-процесс. Не все слышали об этом интересном, но пугающем слове, относящемся к операционной системе Linux. На персональном компьютере зомби-процессы могут не представлять угрозы для обычного пользователя, но когда дело доходит до серверов Linux, эти процессы необходимо идентифицировать и останавливать.
Такие процессы могут вызвать проблемы с таблицей процессов вашей системы и, в свою очередь, помешать правильному функционированию вашей машины. Поэтому в этой статье мы подробно обсудим зомби-процессы, а также подробное руководство по поиску и уничтожению зомби-процессов на машине Linux.
Что такое зомби-процессы?
Но прежде всего важно знать, что такое зомби-процессы на самом деле. Это не что иное, как мертвые и неработающие процессы, которые занимают место в таблице системных процессов. А блок управления технологическим процессом или PCB - это структура данных, в которой хранятся детали, связанные с отдельными процессами, запущенными в вашей системе.
Таблица процессов состоит из идентификатора процесса, ссылки на плату и другой полезной информации, связанной с процессом. У зомби-процессов есть собственные идентификаторы процессов и информация об управлении памятью. Поскольку ОС Linux имеет ограниченное количество доступных идентификаторов процессов, другие процессы не могут использовать идентификаторы PID, пока процесс-зомби не остановится.
Хотя один или два зомби-процесса не вызовут сбоев или проблем с производительностью на вашем компьютере, большое количество таких процессов может навредить рабочему процессу вашей системы из-за переполнения таблицы процессов и Ресурсы.
Что вызывает зомби-процессы в Linux?
Чтобы подробно понять основную причину зомби-процесса, вам нужно узнать, как процессы запускаются и останавливаются в Linux. Операционная система Linux контролирует все запущенные процессы и демоны на компьютере. В таблица процессов - это список структур, содержащий все процессы, которые в данный момент выполняются на вашем компьютере.
Каждая запись процесса в таблице процессов состоит из ссылки на блок управления технологическим процессом этого конкретного процесса. На плате хранятся детали, связанные с этим конкретным процессом. Эти детали включают:
- Состояние процесса: Текущее состояние процесса
- Номер процесса: Уникальный номер, используемый для идентификации процесса.
- Счетчик команд: Содержит информацию, относящуюся к следующей инструкции.
- Регистры: Список всех регистров ЦП, используемых процессом
- Открыть список файлов: Файлы, используемые процессом
- Информация о расписании ЦП: Содержит информацию, связанную с процессорным временем и ресурсами, выделенными процессу.
- Информация об управлении памятью: Включает сведения об объеме памяти, используемой процессом.
- Информация о вводе / выводе: Список устройств ввода или вывода, используемых процессом.
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 в MUO. Он пишет информационный контент в Интернете более 3 лет. В свободное время он любит писать, слушать музыку и играть на гитаре.
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!
Еще один шаг…!
Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.