Що таке процес зомбі і як його вбити?


Відповіді:


17

О, Боже! Ні-ні-ні. Не використовуйте kill -9.

Це не дає процесу чисто:

  1. вимкнути розетки

  2. очищення тимчасових файлів

  3. повідомити своїх дітей, що вона йде

  4. скиньте його термінальні характеристики тощо, і так далі, і так далі.

Як правило, надішліть 15, і зачекайте секунду-дві, і якщо це не працює, надішліть 2, а якщо це не працює, надішліть 1. Якщо цього не відбувається, ВИДАЛУЙТЕ БІННЯР, оскільки програма погано ведеться!

Не використовуйте kill -9. Не виймайте зернозбиральний комбайн лише для того, щоб привести в порядок квітковий горщик.


13
убити -9 не вб'є зомбі. Ви повинні вбити їх батьків, подивіться на pstree.
LapTop006

3
@ LapTop006: У такому випадку вони більше схожі на вампірів; вбити голову вампіра, щоб зупинити вторгнення.
амфетамахін

2
Ця відповідь є помилковою майже у всіх напрямках. Процес завершений; він уже вимкнув свої з'єднання, очистив тимчасові файли тощо. Такого фактичного процесу вже немає, просто запис у таблиці процесів. Не виймайте дитину двійковим - це погано поводиться. Це просто означає, що батько ще не провів належного похорону своєї дитини.
Кен Вільямс

19

Процес зомбі (насправді їх зараз називають <defunct>) насправді не є процесом. Це лише запис у таблицю процесів, тому батьківський процес може виконувати wait()syscall .

Ви не повинні турбуватися про них. Вони не займають ніяких ресурсів, вони зникнуть або тоді, коли їхній батько зателефонує, wait()коли сам батько помре.



9

Однак відповідь вже прийнята: ви МОЖЕТЕ вбити процес зомбі. Приєднайте за допомогою налагоджувача до батьківського процесу та викличте функцію очікування. Наприклад: - припустимо, що у батьків є PID = 100, процес зомбі має PID = 200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit

Цікаво. Я спробую це.
ewwhite

8

Процес зомбі не виділяє йому жодних ресурсів, крім запису в дереві процесів. Це трапляється, коли процес завершується, однак батьківський процес ще його не отримав (тобто waitредагується на ньому).

Ви можете спробувати змусити батьків зробити це, якщо хочете, надіславши його SIGCHLD ( kill -20), батькові, але немає гарантії, що батько його буде шанувати.

Ви їх часто бачите за короткий проміжок часу (наприклад, переглядаючи дерево процесів за допомогою верху) - це нормально; У часовий відрізок між часом, який завершується дочірнім процесом, і батьківським опитуванням за нього - дочірній процес з’явиться як зомбі.

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

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

У нас є багато шалених розробників, де я працюю, і тому я маю привілей займатися такими питаннями та вивчати всілякі непотрібні речі, роблячи це. Насправді - моя команда часто вдається до використання шалених сценаріїв оболонок, написаних розлюченими розробниками в інтерв'ю, - якщо кандидат може вибрати, що сценарій справді божевільний, і сказати нам, чому це шалено, у нього хороша нога у двері.


0

Що стосується віртуальної рушниці ...

$ shoot <pid>
#! / бін / ш
жертва = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' `
жертва \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {жертва} \ b" | голова -n 1 | awk '{print $ 2}' `
#kill $ {жертва}
ехо "Вбито $ {ім'я_ жертви}."

І пам’ятайте: завжди стріляйте ними в голову.


Вибачте, але для запису, цей скрипт має помилку "ім'я жертви" і збирається вбити батьківського PID, який надається на 1 дол. вбиває батька і з ним загине вся родина.
Марк Рієра

-1

Процес зомбі - це процес, який завершився виконанням, але все ще перерахований у таблиці процесів.

kill -9 [батьківська_файла_назва] поставить це вниз, з крайнім упередженням.


kill -9 не вб'є процес зомбі - ось одна з причин їх називають зомбі. Зомбі "процес" не піде, поки його код повернення не буде введений батьківським процесом.
Май

3
Ні, вбийте -9 на РОБОТЕ вбиває батька, зробивши його батьком, який ВІДПОЧИТИ код повернення дитини.
Алан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.