Что такое «процесс зомби» в Linux?

Оглавление:

Что такое «процесс зомби» в Linux?
Что такое «процесс зомби» в Linux?

Видео: Что такое «процесс зомби» в Linux?

Видео: Что такое «процесс зомби» в Linux?
Видео: Как ФСБ следит за людьми в России | Взлом Telegram, камеры, паспорта - YouTube 2024, Апрель
Anonim
Если вы пользователь Linux, вы, возможно, видели процессы зомби, сокрушительные вокруг списка процессов. Вы не можете убить зомби-процесс, потому что он уже мертв - как настоящий зомби.
Если вы пользователь Linux, вы, возможно, видели процессы зомби, сокрушительные вокруг списка процессов. Вы не можете убить зомби-процесс, потому что он уже мертв - как настоящий зомби.

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

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

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

Когда процесс умирает в Linux, он не сразу удаляется из памяти - его дескриптор процесса остается в памяти (дескриптор процесса занимает всего лишь небольшой объем памяти). Статус процесса становится EXIT_ZOMBIE, а родитель процесса уведомляется о том, что его дочерний процесс умер с сигналом SIGCHLD. Затем родительский процесс должен выполнить системный вызов wait (), чтобы прочитать статус выхода мертвого процесса и другую информацию. Это позволяет родительскому процессу получать информацию из мертвого процесса. После вызова wait () процесс зомби полностью удаляется из памяти.

Это обычно происходит очень быстро, поэтому вы не увидите, как процессы zombie накапливаются в вашей системе. Однако, если родительский процесс не запрограммирован правильно и никогда не вызывает wait (), его дети-зомби будут оставаться в памяти до тех пор, пока они не будут очищены.

Утилиты, такие как GNOME System Monitor, Топ команды и п.с. командный дисплей зомби процессов.

Image
Image

Опасности зомби-процессов

Процессы Zombie не используют никаких системных ресурсов. (На самом деле каждый из них использует очень маленький объем системной памяти для хранения дескриптора процесса.) Однако каждый процесс зомби сохраняет свой идентификатор процесса (PID). Системы Linux имеют конечное число идентификаторов процессов - 32767 по умолчанию в 32-битных системах. Если зомби накапливаются очень быстро, например, если неправильно запрограммированное серверное программное обеспечение создает процессы зомби под нагрузкой, весь пул доступных PID в конечном итоге станет привязан к зомби-процессам, предотвращая запуск других процессов.

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

Image
Image

Избавление от процессов зомби

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

Одним из способов является отправка сигнала SIGCHLD в родительский процесс. Этот сигнал сообщает родительскому процессу выполнить системный вызов wait () и очистить его детей-зомби. Отправьте сигнал с помощью убийство команда, заменяющая ПИД-регулятор в приведенной ниже команде с PID родительского процесса:

kill -s SIGCHLD pid

Однако, если родительский процесс не запрограммирован правильно и игнорирует сигналы SIGCHLD, это не поможет. Вам придется убить или закрыть родительский процесс зомби. Когда процесс, который создал зомби, заканчивается, init наследует процессы зомби и становится их новым родителем. (init - это первый процесс, запущенный в Linux при загрузке и назначенный PID 1.) init периодически выполняет системный вызов wait () для очистки своих детей-зомби, поэтому init будет выполнять короткую работу зомби. Вы можете перезапустить родительский процесс после его закрытия.

Если родительский процесс продолжает создавать зомби, он должен быть исправлен так, чтобы он правильно вызывал wait (), чтобы пожинать своих детей-зомби. Создайте отчет об ошибке, если программа в вашей системе продолжает создавать зомби.

Рекомендуемые: