Зомбі - це процеси DEAD. Вони не можуть бути "вбитими" (Ви не можете вбити СМЕРТУ). Усі процеси зрештою гинуть, і коли вони стають, вони стають зомбі. Вони майже не споживають ресурсів, чого можна очікувати, оскільки вони мертві! Причина зомбі полягає в тому, що батьківський зомбі (процес) може отримати статистику виходу зомбі та використання ресурсів. Батько сигналізує операційній системі, що вона більше не потребує зомбі, використовуючи один із викликів системи wait ().
Коли процес гине, його дочірні процеси стають дітьми процесу №1, що є процесом init. Ініт `` завжди '' чекає, коли діти помруть, щоб вони не залишалися зомбі.
Якщо у вас є процеси зомбі, це означає, що цих зомбі не чекав їхній батько (дивіться, як відображається PPID ps -l
). У вас є три варіанти: виправити батьківський процес (змусити його чекати); вбити батьків; або жити з цим. Пам’ятайте, що жити з нею не так вже й складно, оскільки зомбі займає трохи більше, ніж один зайвий рядок у виході ps
Зомбі можна ідентифікувати у висновку з команди Unix ps за наявністю "Z" у стовпці STAT. Зомбі, які існують більше короткого періоду часу, зазвичай вказують на помилку в батьківській програмі. Як і у випадку інших протікань, наявність декількох зомбі сама по собі не турбує, але може вказувати на проблему, яка зростатиме серйозною при більш важких навантаженнях.
Щоб видалити зомбі із системи, сигнал SIGCHLD можна надіслати батькові вручну, використовуючи команду kill. Якщо батьківський процес все ще відмовляється від позову зомбі, наступним кроком буде видалення батьківського процесу. Коли процес втрачає свого батьківського, init стає його новим батьківським. Init періодично виконує виклик системи очікування, щоб отримати жодного зомбі з init як батьків.
Існують також сирітські процеси, які є комп'ютерним процесом, чий батьківський процес закінчився або припинився.
Процес може стати осиротілим під час віддаленого виклику, коли клієнтський процес вийде з ладу після подання запиту сервера.
Сироти витрачають ресурси сервера і потенційно можуть залишити сервер у біді (Це найбільша різниця ресурсів між зомбі та сиротами (за винятком випадків, коли ви бачите якийсь фільм про сиріт-сиріт). Однак існує декілька рішень проблеми сирітського процесу:
Винищення - це найчастіше застосовувана техніка; в цьому випадку сирітський процес вбивається.
Перевтілення - це техніка, в якій машини періодично намагаються знайти батьків будь-яких віддалених обчислень; в цей момент осиротілі процеси вбиваються.
Термін дії - це техніка, коли кожному процесу відводиться певний проміжок часу, перш ніж його вбити. Якщо потрібно, процес може "попросити" закінчити більше часу до закінчення відведеного часу.
Процес також може бути осиротілим, що працює на тій же машині, що і його батьківський процес. У подібній операційній системі UNIX будь-який осиротілий процес буде негайно прийнятий спеціальним системним процесом "init". Ця операція називається повторним вихованням і відбувається автоматично. Незважаючи на те, що технічно цей процес має батьківський процес "init", він все ще називається сиротою, оскільки процес, який його створив, вже не існує.
Більше інформації:
http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU
http://www.linuxsa.org.au/tips/zombies.html
http://www.brighthub.com/computing/linux/articles/79186.aspx
Як визначити і вбити процес вивішування, коли система висить і повільно реагує на введення користувача?
Вбивство запущеного процесу в машині Ubuntu віддалено від машини Windows, яка знаходиться в локальній мережі