Должен ли я убить зомби процесс в моей системе?


20

Поскольку я новичок в системах Linux / Unix и просто читаю о процессах зомби , у меня есть один вопрос. У меня есть 10 из них прямо сейчас. Нужно ли их убивать и если да, то почему? Это нагрузка на мою систему?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
Не нужно их убивать. Они уже мертвы.
Марко

2
Поэтому они больше не загружают мою систему. И они останутся такими, пока я не перезагружу систему или я не убью их, верно?
Джейсон Пэддл

7
@ Марко: Ты не можешь убить то, что уже мертво. Но ты можешь убить его родителей, хархарр!
wullxz

7
Проблема в том, что их родители не пожали их (когда они умерли).
ypercubeᵀᴹ

3
10 зомби ??? Вы заражены! Беги, Джейсон, беги.
Люк М

Ответы:


29

Вы не можете убить зомби, он уже мертв.

Ресурсы этого процесса бесплатны и доступны для других процессов. Остается запись в таблице процессов. Это не влияет на производительность, не волнуйтесь.


Да, это имеет смысл. Я могу убить родительский процесс. Спасибо Вам за информацию. Я просто хотел знать, загружены они или нет системы.
Джейсон Пэддл

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

@ProfessionalAmateur Что произойдет, если вы достигнете предела зомби (1024 или что-то еще)?
Родди из замороженного гороха

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

2
@ProfessionalAmateur: в Linux нет ограничений по зомби . PID зомби /proc/sys/kernel/pid_max, как и любой другой PID, подлежат .
Rushaw

16

Что это за зомби-процессы, которые появляются в пс? Я убиваю их, но они не уходят!

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

Когда процесс умирает, все его дочерние процессы становятся дочерними для процесса номер 1, который является процессом init. Иници всегда ждет смерти детей, чтобы они не оставались зомби.

Если у вас есть процессы зомби, это означает, что их родители не ожидали этих зомби (посмотрите на PPID, отображаемый ps -l). У вас есть три варианта: исправить родительский процесс (заставить его ждать); убить родителя; или жить с этим. Помните, что жить с ним не так сложно, потому что зомби занимают чуть больше одной дополнительной строки в выводе ps.

Источник: http://www.linuxsa.org.au/tips/zombies.html

И в случае, если вы находитесь на грани убийства, этот поток суперпользователя может быть вам интересен: как вы находите родительский процесс процесса зомби?


Обратите внимание, что исправление родителя может быть излишним - может быть, оно еще не дошло до того, что ждет его детей. Может быть, это будет сделано позже (или да, может быть, не будет).
Ромен

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

7

Вам не нужно убивать их.

Чтобы построить некоторое базовое понимание:

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

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

Законченный дочерний процесс остается в таблице процессов как процесс зомби, пока родительский процесс не «пожнет» или не ждет дочернего процесса, который просто является родительским процессом, сообщающим ОС, что ему больше не нужен этот дочерний процесс; Он прочитал все возвращаемые значения, которые он хочет, и сделал с этим. На этом этапе система очистит запись в таблице процессов.


3

Этот процесс не нужно убивать.

На всякий случай, если вы все равно хотите убить его (по какой-либо причине), убедитесь, что вы стреляете в голову, вот полезная команда:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

С https://www.erianna.com/kill-a-linux-zombie-process


1
+1 за shoot at the head.
BenjiWiebe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.