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


138

З такими командами, як topі на основі gui, System Monitorя бачу, що на даний момент у мене є кілька процесів зомбі.

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

Чи впливають вони на продуктивність системи чи програми, до якої вони зомбі. Вони використовують занадто багато пам'яті чи взагалі будь-яку пам'ять?


39
Це процеси, які хочуть з'їсти ваш процесор;)
Луїс Альварадо

8
на обід ... :)
RolandiXor

3
Ці процеси мертві, але не поховані.
Prateek Joshi

2
Їжте мій процесор ?! Це насправді жахливо!
Håvard Geithus

Відповіді:


162

Зомбі - це процеси DEAD. Вони не можуть бути "вбитими" (Ви не можете вбити СМЕРТУ). Усі процеси зрештою гинуть, і коли вони стають, вони стають зомбі. Вони майже не споживають ресурсів, чого можна очікувати, оскільки вони мертві! Причина зомбі полягає в тому, що батьківський зомбі (процес) може отримати статистику виходу зомбі та використання ресурсів. Батько сигналізує операційній системі, що вона більше не потребує зомбі, використовуючи один із викликів системи wait ().

Коли процес гине, його дочірні процеси стають дітьми процесу №1, що є процесом init. Ініт `` завжди '' чекає, коли діти помруть, щоб вони не залишалися зомбі.

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

Зомбі можна ідентифікувати у висновку з команди Unix ps за наявністю "Z" у стовпці STAT. Зомбі, які існують більше короткого періоду часу, зазвичай вказують на помилку в батьківській програмі. Як і у випадку інших протікань, наявність декількох зомбі сама по собі не турбує, але може вказувати на проблему, яка зростатиме серйозною при більш важких навантаженнях.

Щоб видалити зомбі із системи, сигнал SIGCHLD можна надіслати батькові вручну, використовуючи команду kill. Якщо батьківський процес все ще відмовляється від позову зомбі, наступним кроком буде видалення батьківського процесу. Коли процес втрачає свого батьківського, init стає його новим батьківським. Init періодично виконує виклик системи очікування, щоб отримати жодного зомбі з init як батьків.

Існують також сирітські процеси, які є комп'ютерним процесом, чий батьківський процес закінчився або припинився.

Процес може стати осиротілим під час віддаленого виклику, коли клієнтський процес вийде з ладу після подання запиту сервера.

Сироти витрачають ресурси сервера і потенційно можуть залишити сервер у біді (Це найбільша різниця ресурсів між зомбі та сиротами (за винятком випадків, коли ви бачите якийсь фільм про сиріт-сиріт). Однак існує декілька рішень проблеми сирітського процесу:

  1. Винищення - це найчастіше застосовувана техніка; в цьому випадку сирітський процес вбивається.

  2. Перевтілення - це техніка, в якій машини періодично намагаються знайти батьків будь-яких віддалених обчислень; в цей момент осиротілі процеси вбиваються.

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

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


18
Ехм! МОЖЕТЕ вбити мертвих! Вам потрібно лише прицілитися в голову. Або вони весь час брехали нам?
Марцін Камінський

1
initзакликає waitвсі його дочірні процеси, будь то зомбі, сирота (усиновлена) та біологічна (самороджена)?
Кровотечі пальцями

1
відповідно до Z світової війни використовуйте камуфляж: P
عثمان غني

Будь ласка, дайте медаль @MarcinKaminski!
Андреа

20

Зомбі-процеси (також показані як <defunct>), зовсім не справжні процеси. Вони просто записи в таблиці процесу ядра. Це єдиний ресурс, який вони споживають. Вони не споживають жодного процесора або оперативної пам’яті. Єдина небезпека виникнення зомбі - це нестача місця в таблиці процесів (ви можете використовувати, cat /proc/sys/kernel/threads-maxщоб побачити, скільки записів дозволено у вашій системі).

Вони з'являються лише тоді, коли їхній батьківський процес (тобто процес, який fork()'edвони є) живий, але ще не викликав wait()функцію системи. Після того, як батько помирає, зомбі wait()'edза допомогою initі зникають.


4
top`Скріншот в цьому питанні , здається, суперечить вам? Там, здається, зомбі використовує 100% 1 процесора, але немає пам’яті.
Torben Gundtofte-Bruun

7

Коли child processприпиняється, її смерть повідомляється батькові, щоб батько міг вжити певних заходів.

process, Який чекає свого батька прийняти свій код повернення називається процес зомбі .

Вони є, completed their executionале все ще є entryв process table.


1

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

Процеси зомбі з довше життя протікають, коли батьківські процеси не викликають системну виклик очікування після закінчення дочірнього процесу. Одна з ситуацій, коли це відбувається - це те, що батьківський процес погано записаний і просто відхиляє виклик очікування або коли батьківський процес помирає перед дитиною, а новий батьківський процес не вимагає чекати на нього. Коли батько процесу помирає перед дитиною, ОС призначає дочірній процес процесу "init" або PID 1. тобто процес init "приймає" дочірній процес і стає його батьківським. Це означає, що тепер, коли дочірній процес закінчується, новий батько (init) повинен зателефонувати, щоб отримати код виходу або його запис у таблицю процесу залишається назавжди, і він стає зомбі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.