Изучите Linux

Как убить процессы зомби в Linux

Как убить процессы зомби в Linux

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

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

Что вызывает процессы Linux Zombie?

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

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

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

Когда младший процесс завершится, плата и запись в таблице процессов не будут удалены. В результате этого состояние зомби никогда не удаляется с печатной платы.

У зомби есть память, но обычно это не проблема. Поскольку системы Linux имеют конечное количество PID (хотя и большое количество), если достаточно PID зомбировано, никакой другой процесс не может запуститься. Сомнительно, что это произойдет.

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

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

На объем памяти, доступной для других процессов, может повлиять большое количество зомби. Однако, если у вас так много зомби, у вас серьезная проблема с родительским приложением или ошибка в операционной системе.

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

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

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

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

вершина

верхние результаты команд

Количество зомби-процессов в этой системе будет отображаться на выходе. В нашем случае выше у нас 0 зомби.
Используя команду ps и подключив ее к egrep, мы можем получить их список. Государственный флаг для зомби-процессов - «Z», и иногда вы также можете увидеть «несуществующие».

tuts @ fosslinux: ~ $ ps aux | egrep "Z | несуществующий"

Государственный флаг для зомби-процессов - Z или несуществующий

Давайте разберем различные разделы этой команды.

Z в столбце STAT выходных данных указывает на зомби-процесс.
[defunct] в последнем столбце (COMMAND) вывода также указывает на зомби-процесс.

В идеале невозможно убить процесс Зомби, потому что он мертв. Вместо этого мы уведомляем родителя, чтобы он попытался прочитать статус дочернего процесса и, наконец, очистить их из системной таблицы. Чтобы запустить этот процесс, мы отправляем сигнал SIGCHLD родительскому процессу. Для определения идентификатора родительского процесса или того, что называется PID, необходимо выполнить следующую команду:

tuts @ fosslinux: ~ $ ps -o ppid = 

Определение идентификатора родительского процесса

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

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

используйте команду SIGCHLD signal

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

Ниже приведена команда для уничтожения родительского процесса.

tuts @ fosslinux: ~ $ kill -9 

команда убить родительский процесс

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

В Linux, как работают состояния процессов?

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

Они хранят идентификатор процесса, несколько других частей информации и указатель на блок управления процессом (PCB).

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

На печатной плате Linux более 95 полей. Он определен в структуре задачи, которая составляет более 700 строк. На печатной плате можно найти следующую информацию:

Состояния процесса показаны ниже

Любое из следующего может быть «Состояние процесса»:

Заключение

Если они не являются частью огромной орды, зомби не так опасны. Некоторые из них не имеют большого значения, и быстрая перезагрузка устранит их. Однако следует учесть один момент.

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

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

Скорее всего, это просто плохо написанная программа; в этом случае, возможно, есть обновленная версия, которая очищается после того, как ее дочерний процесс правильно.

Учебник OpenTTD
OpenTTD - одна из самых популярных бизнес-симуляторов. В этой игре вам нужно создать замечательный транспортный бизнес. Тем не менее, вы начнете в нач...
SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...