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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Git configuration in linux

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

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

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

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

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

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

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

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

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

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

Читайте также:  Какую linux выбрать программисту

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

Источник

Зомби процессы Linux

Каждая программа, которая выполняется в Linux, — это системный процесс, у которого есть свой идентификатор. Каждый процесс может запускать дочерние процессы с помощью функции fork. Такие процессы остаются под контролем родительского процесса и не могут быть завершены без его ведома. Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби.

Зомби процессы Linux не выполняются и убить их нельзя, даже с помощью sigkill, они продолжают висеть в памяти, пока не будет завершён их родительский процесс.

Посмотреть такие процессы можно с помощью утилиты ps, здесь они отмечаются как defunct:

Если вы попытаетесь убить такой процесс с помощью сигнала KILL, то ничего не выйдет:

Чтобы его завершить, нужно найти «родителя» этого процесса. Для этого используйте команду:

Здесь идентификатор родительского процесса находится в четвёртой колонке (PPID). Теперь мы можем послать ему сигнал завершения, и такого процесса в системе больше не будет:

Для большего удобства вы можете использовать утилиты top или htop, но принцип их действия будет аналогичным, поэтому я не буду здесь его рассматривать. Теперь вы знаете, что делать, если в вашей системе появились зомби процессы Linux.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector