Відповіді:
О, Боже! Ні-ні-ні. Не використовуйте kill -9.
Це не дає процесу чисто:
вимкнути розетки
очищення тимчасових файлів
повідомити своїх дітей, що вона йде
скиньте його термінальні характеристики тощо, і так далі, і так далі.
Як правило, надішліть 15, і зачекайте секунду-дві, і якщо це не працює, надішліть 2, а якщо це не працює, надішліть 1. Якщо цього не відбувається, ВИДАЛУЙТЕ БІННЯР, оскільки програма погано ведеться!
Не використовуйте kill -9. Не виймайте зернозбиральний комбайн лише для того, щоб привести в порядок квітковий горщик.
Процес зомбі (насправді їх зараз називають <defunct>) насправді не є процесом. Це лише запис у таблицю процесів, тому батьківський процес може виконувати wait()syscall .
Ви не повинні турбуватися про них. Вони не займають ніяких ресурсів, вони зникнуть або тоді, коли їхній батько зателефонує, wait()коли сам батько помре.
Однак відповідь вже прийнята: ви МОЖЕТЕ вбити процес зомбі. Приєднайте за допомогою налагоджувача до батьківського процесу та викличте функцію очікування. Наприклад: - припустимо, що у батьків є PID = 100, процес зомбі має PID = 200
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Процес зомбі не виділяє йому жодних ресурсів, крім запису в дереві процесів. Це трапляється, коли процес завершується, однак батьківський процес ще його не отримав (тобто waitредагується на ньому).
Ви можете спробувати змусити батьків зробити це, якщо хочете, надіславши його SIGCHLD ( kill -20), батькові, але немає гарантії, що батько його буде шанувати.
Ви їх часто бачите за короткий проміжок часу (наприклад, переглядаючи дерево процесів за допомогою верху) - це нормально; У часовий відрізок між часом, який завершується дочірнім процесом, і батьківським опитуванням за нього - дочірній процес з’явиться як зомбі.
Якщо ви бачите зомбі-процеси, які постійно існують, - але це не нормально - все одно не варто турбуватися - знову ж таки, оскільки немає ресурсу, виділеного на мертвий процес - це, як правило, означає, що додаток погано написаний хитрими розробниками.
Єдиний час, коли ви повинні бути стурбовані зомбі-процесами, це коли ви бачите багато і багато з них, наприклад, якщо той самий хиткий додаток, згаданий вище, знаходиться під навантаженням.
У нас є багато шалених розробників, де я працюю, і тому я маю привілей займатися такими питаннями та вивчати всілякі непотрібні речі, роблячи це. Насправді - моя команда часто вдається до використання шалених сценаріїв оболонок, написаних розлюченими розробниками в інтерв'ю, - якщо кандидат може вибрати, що сценарій справді божевільний, і сказати нам, чому це шалено, у нього хороша нога у двері.
Що стосується віртуальної рушниці ...
$ 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 $ {жертва}
ехо "Вбито $ {ім'я_ жертви}."
І пам’ятайте: завжди стріляйте ними в голову.
Процес зомбі - це процес, який завершився виконанням, але все ще перерахований у таблиці процесів.
kill -9 [батьківська_файла_назва] поставить це вниз, з крайнім упередженням.