Jaké jsou zombie procesy?

129

Příkazy jakotop a gui basedSystem Monitor I vidím, že v tuto chvíli mám několik zombie procesů.

Co jsou zombie procesy?

Ovlivňují výkon systému nebo aplikace, do které jsou zombie. Používají příliš mnoho paměti nebo paměť?

    
dané Jesper 14.06.2011 00:27

3 odpovědi

152

Zombie jsou procesy DEAD. Nemohou být "zabíjet" (Nemůžete zabít DEAD). Všechny procesy nakonec zemřou, a když se stanou zombiemi. Vyčerpávají téměř žádné zdroje, které lze očekávat, protože jsou mrtvé! Důvodem pro zombie je, že zombie rodiče (proces) mohou načíst stavy ukončení zombie a statistiky využití zdrojů. Rodič signalizuje operačnímu systému, že už nepotřebuje zombie pomocí jednoho z čekacích () systémových volání.

Když proces zemře, jeho dítě zpracovává všechny děti z procesu č. 1, což je proces init. Init je "vždycky" čeká na to, aby děti zemřely, takže nezůstanou jako zombie.

Pokud máte zombie procesy, znamená to, že tyto zombie nebyly čekal na jejich rodiče (podívejte se na PPID zobrazenéps -l). Máte tři možnosti: Opravte rodičovský proces (počkejte); zabít rodiče; nebo žít s ním. Nezapomeňte, že žijete s ním, není to tak těžké, protože zombie zabírají jen něco víc než jeden další řádek ve výstupu ps.

Zombie mohou být identifikovány na výstupu z příkazu Unix ps pomocí přítomnosti "Z" ve sloupci STAT. Zombie, které existují déle než krátkou dobu, typicky označují chybu v nadřazeném programu. Stejně jako u jiných úniků, přítomnost několika zombií není sama o sobě znepokojující, ale může znamenat problém, který by při těžších zátěžích narůstal.

Chcete-li odstranit zombie ze systému, může být signál SIGCHLD poslán rodičovi ručně pomocí příkazu kill. Pokud mateřský proces stále odmítá sklízet zombie, dalším krokem by bylo odstranění rodičovského procesu. Když proces ztratí rodiče, init se stává jeho novým rodičem. Program Init periodicky provádí volání systému čekat, aby získal všechny zombie s init jako nadřazeným.

Existují také procesy pro osiřelé , které jsou počítačovým procesem, jehož rodičovský proces byl ukončen nebo ukončen.

Během vzdáleného vyvolání může být proces osiřelý, když klientský proces selže po požadavku serveru.

Sirotci odpadají serverové zdroje a mohou potenciálně zanechat server v potížích (Toto je největší rozdíl mezi zombiemi a sirotkami (kromě případů, kdy vidíte nějaký film o zombie zřídka). Existuje však několik řešení problémů s osiřelým procesem:

  1. Znečištění je nejčastěji používanou technikou; v tomto případě je osiřelý proces zabit.

  2. Reinkarnace je technika, při které se stroje periodicky pokoušejí lokalizovat rodiče libovolného vzdáleného výpočtu; v kterém okamžiku jsou osiřelé procesy zabity.

  3. Expirace je technika, při které je každý proces přidělen určitou dobu, než bude zabit. Je-li třeba, může proces "požádat" o více času, než skončí vyčleněný čas.

Proces může být také osiřelý běžící na stejném počítači jako jeho rodičovský proces. V operačním systému typu UNIX bude jakýkoli osamocený proces okamžitě přijat zvláštním systémem "init". Tato operace se nazývá opětovné rodičovství a dochází automaticky. Dokonce i když proces má proces "init" jako svého rodiče, stále se nazývá osiřelý proces, protože proces, který ho původně vytvořil, již neexistuje.

Další informace:

Odkaz

Odkaz

Odkaz

Jak identifikovat a zabít zavěšení procesu, když systém visí a reaguje pomalu na vstup uživatele?

Killing běžící proces v počítači Ubuntu vzdáleně z počítače se systémem Windows, který je v síti LAN .

    
odpověděl Luis Alvarado 14.06.2011 00:39
20

Zombie procesy (také ukazují jako<defunct>), nejsou skutečné procesy vůbec. Jsou to jen položky v tabulce procesů jádra. Jedná se o jediný zdroj, který spotřebovávají. Neužívají žádný CPU ani paměť RAM. Jediné nebezpečí zombie je, že se v tabulce procesů vyskytuje prostor (můžete použítcat /proc/sys/kernel/threads-max, abyste zjistili, kolik položek je ve vašem systému povoleno).

Zobrazují se pouze tehdy, když je jejich nadřazený proces (tj. proces, kterýfork()'ed je) je živý, ale dosud nevolal funkciwait() systému. Jakmile rodiče zemřou, zombie jsouwait()'ed proinit a zmizí.

    
odpověděl vartec 14.06.2011 11:36
6

Když končíchild process, jeho úmrtí se sdělí svému rodiči tak, aby nadřazený mohl podniknout nějaké vhodné kroky.

Aprocess, který je čeká na to, že rodič přijímá svůj návratový kód , se nazývá proces zombie .

Majícompleted their execution, ale stále majíentry vprocess table.

    
odpověděl Prateek Joshi 14.10.2015 18:11