Программы, которые плохо написаны или выполняют плохо, могут уйти Процессы зомби скрывается внутри вашего компьютера Linux. Узнайте, как создаются зомби, и как вы, наконец, накосят, чтобы они отдохнули.
Как работают технологические состояния на Linux
Linux, конечно, должен отслеживать все приложения и демоны, работающие на вашем компьютере. Один из способов это делает это, поддерживая таблицу процессов. Это список структур в памяти ядра. Каждый процесс имеет запись в этом списке, который содержит некоторую информацию об этом.
В каждом из структур технологических структур нельзя нельзя. Они держат процесс идентификатора , несколько других элементов данных и указатель на блок управления процессом (PCB) для этого процесса.
Это PCB, которая удерживает множество деталей Linux, необходимо посмотреть вверх или установить для каждого процесса. PCB также обновляется как создан процесс, учитывая время обработки и, наконец, уничтожено.
PCB Linux содержит более 95 полей.
Это определено
как структура называется
task_struct.h.h.
, и это более 700 строк. PCB содержит следующие типы информации:
- Состояние процесса : Штаты описаны ниже.
- Номер процесса : Его уникальный идентификатор в операционной системе.
- Счетчик команд : Когда этот процесс будет следующим доступом к процессору, система будет использовать этот адрес, чтобы найти следующую инструкцию процесса, который должен быть выполнен.
- Реестры : Список регистров CPU, используемых этим процессом. Список может содержать аккумуляторы, реестры индекса и указатели стека.
- Открытый список файлов : Файлы, связанные с этим процессом.
- Информация о планировании ЦП : Используется для определения того, насколько часто и для того, как долго времени обработки ЦП присуждается этому процессу. Приоритет процесса, указатели на очереди планирования и другие параметры планирования должны быть записаны на PCB.
- Информация о управлении памятью : Подробности о памяти Этот процесс использует, такие как начальные и конечные адреса процессов памяти, а также указатели на страницы памяти.
- Информация о состоянии ввода / вывода : Любые или выходные устройства, используемые процессом.
«Состояние процесса» может быть любое из следующих действий:
- Р: Бегущий или родильный процесс. Нахождение означает, что он получает циклы CPU и выполнение. Процесс Runnable готов к запуску и ожиданию слота процессора.
- S: Спящий процесс. Процесс ждет действия для завершения, такого как операцию в или выводе, или для того, чтобы стать доступным ресурсом.
- D: Процесс находится в бесперебойном состоянии сна. Он использует системный вызов блокировки и не может продолжаться до тех пор, пока системные вызовы не будут завершены. В отличие от состояния «Sleep», процесс в этом состоянии не будет реагировать на сигналы до тех пор, пока не будет завершен системный вызов, и выполнение не вернется к процессу.
-
T:
Процесс прекращен (остановлен), потому что он получил
Sigstop.сигнал. Это только ответит к томуSigkill.илиSigcont.сигналы, которые либо убивают процесс, либо инструктируют его продолжать соответственно. Это то, что происходит, когда вы обменяете передний план (фаршНесомненно к фон (BG)задания. -
Z:
Процесс зомби. Когда процесс завершается, это не просто исчезнет. Он освобождает любую память, которую он использует и удаляет себя от памяти, но ее запись в таблице процесса и PCB остается. Его состояние установлено на
Exit_zombieи его родительский процесс уведомлен (поSigchld.сигнал), что дочерний процесс закончил.
В государстве зомби родительский процесс называет один из
ждать()
семьи функций
когда ребенок создан. Затем он ждет, за изменение состояния в детском процессе. Детский процесс был остановлен, продолжен или убит сигналом? Это прекращено путем пробега через естественное завершение своего кода?
Если изменение состояния заключается в том, что означает, что дочерний процесс перестал работать, его код выхода читается. Затем PCB ребенка разрушается, и его запись в таблице процесса удаляется. В идеале, это все происходит в мгновение ока, а процессы в состоянии зомби не существуют очень долго.
СВЯЗАННЫЕ С: Как запустить и контролировать фоновые процессы на Linux
Что вызывает процессы зомби на Linux?
Плохо написанный родительский процесс может не позвонить
ждать()
Функция, когда ребенок создан. Это означает, что ничего не наблюдается за изменениям в детском процессе, а также
Sigchld.
Сигнал будет игнорироваться. Или, возможно, другое приложение влияет на выполнение родительского процесса, либо из-за плохого программирования, либо вредоносного намерения.
Однако, если родительский процесс не наблюдается за государственными изменениями в дочернем процессе, правильная система домашнего хозяйства не произойдет. PCB и запись в таблице процесса не будут удалены при заканчиваемых дочерних процессов. Это результаты в государстве зомби никогда не удаляются с PCB.
Зомби используют немного памяти, но они обычно не представляют проблему. Вход в таблицу процессов невелики, но до тех пор, пока он не выделяется, идентификатор процесса не может быть использован повторно. В 64-разрядной операционной системе это вряд ли вызвать какие-либо проблемы, потому что PCB намного больше, чем запись таблицы процесса.
Огромное количество зомби могло, возможно, повлиять на количество памяти, которое бесплатно для других процессов. Если у вас есть много зомби, однако, у вас серьезная проблема с исходным приложением или ошибкой операционной системы.
Как удалить процессы зомби
Вы не можете убить процесс зомби, потому что он уже мертв. Это не отвечает на какие-либо сигналы, потому что он был удален из памяти - нигде некуда отправить
Sigkill.
сигнал. Вы можете попробовать отправить
Sigchld.
Сигнал к родительскому процессу, но если он не сработал, когда дочерний процесс завершился, он вряд ли будет работать сейчас.
Единственным надежным решением является убить родительский процесс. Когда он прекращен, его дочерние процессы унаследованы
в этом
Процесс, который является первым процессом для запуска в системе Linux (его идентификатор процесса 1).
То
в этом
Процесс регулярно выполняет необходимую очистку зомби, чтобы убить их, вам просто нужно убить процесс, который их создал. То
Топ
Команда - это удобный способ увидеть, есть ли у вас зомби.
Введите следующее:
Вершина
Эта система имеет восемь процессов зомби. Мы
можете перечислить эти
Используя
PS.
команда
и трубы его в
эгистрация
Отказ Опять же, процессы зомби имеют государственный флаг «Z», и вы обычно также видите «несуществующие».
Введите следующее:
PS AUX | egerep "z | несуществующий"
Процессы зомби перечислены.
Это внешний способ обнаружения идентификаторов процессов зомби, чем прокрутка назад и вперед
Топ
Отказ Мы также видим, что приложение под названием «BadPrg» породили эти зомби.
Идентификатор процесса первого зомби составляет 7641, но нам нужно найти идентификатор процесса своего родительского процесса. Мы можем сделать это, используя
опять таки. Мы будем использовать опцию вывода (
PS.
-О
) сказать
PS.
отображать только идентификатор процесса родителей, а затем пройти его с
PPID =
флаг.
Процесс, который мы хотим найти, будет указано с использованием
-п
(процесс) опция, а затем прохождение в идентификатор процесса зомби.
Следовательно, мы вводим следующую команду, чтобы посмотреть информацию о процессе для процесса 7641, но она будет только сообщать о идентификаторе родительского процесса:
PS-PPID = -P 7641
Нам сказали родительский идентификатор процесса 7636. Теперь мы можем перекрестить ссылку на это, используя
PS.
еще раз.
Мы видим, что это соответствует названию родительского процесса с ранее. Чтобы убить родительский процесс, используйте вариант SIGKILL с помощью команды kill следующим образом:
kill -sigkill 7636
В зависимости от владельца родительского процесса, вам также может потребоваться использовать
Sudo.
Отказ
Зомби не страшно ...
... Если они не в массивной Орды. Несколько ничего не беспокоиться, и простой перезагрузка вытирает их.
Однако, если вы заметите, что приложение или процесс всегда нерестоты зомби, это то, что вы должны изучить. Скорее всего, это просто небрежно написанная программа, в этом случае, возможно, есть обновленная версия, которая правильно очищает после его дочерних процессов.