Чи слід вбивати процес зомбі у своїй системі?


20

Оскільки я новачок у системах Linux / Unix і просто читав про процеси зомбі , у мене є одне питання. У мене зараз 10 з них. Чи потрібно їх вбивати і якщо так, то чому? Вони навантажують мою систему?

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

25
Не потрібно їх вбивати. Вони вже мертві.
Марко

2
Тому вони більше не завантажують мою систему. І вони залишаться такими, доки я не перезавантажую систему або я їх вбиваю, правда?
Джейсон Paddle

7
@Marco: Ви не можете вбити того, що вже мертве. Але ти можеш вбити його батьків, гаразд!
wullxz

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

3
10 зомбі ??? Ви заражені! Запусти Джейсона біжи.
Люк М

Відповіді:


29

Ви не можете вбити зомбі, воно вже мертве.

Ресурси цього процесу безкоштовні та доступні для інших процесів. Залишається запис у таблиці процесів. Це не впливає на продуктивність, не хвилюйтесь.


Так, це має сенс. Я можу вбити батьківський процес. Дякую за інформацію. Мені просто хотілося знати, завантажують вони систему чи ні.
Джейсон Paddle

Я вважаю, що існує обмеження зомбі. Я думаю, що його 1024, тож це не зашкодить продуктивності, але я думаю, що існує кількість плафонів.
ProfessionalAmateur

@ProfessionalAmateur Що станеться, якщо ви досягнете межі зомбі (1024 чи будь-якої іншої)?
Родді з замороженого гороху

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

2
@ProfessionalAmateur: У Linux немає обмеження зомбі . Зомбі PID підлягають /proc/sys/kernel/pid_max, як і всі інші PID.
rsaw

16

Які ці процеси зомбі виявляються в PS? Я вбиваю їх, але вони не зникають!

Зомбі - це мертві процеси. Ви не можете вбити мертвих. Усі процеси зрештою гинуть, і коли вони стають, вони стають зомбі. Вони майже не споживають ресурсів, чого можна очікувати, оскільки вони мертві! Причина зомбі полягає в тому, що батько зомбі (процес) може отримати статистику виходу зомбі та використання ресурсів. Батько сигналізує операційній системі, що вона більше не потребує зомбі, використовуючи один з викликів системи 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.