Naučte se Linux

Jak zabít procesy Zombie v Linuxu

Jak zabít procesy Zombie v Linuxu

Proces zombie v Linuxu odkazuje na ty již mrtvé procesy, ale tak či onak jsou stále přítomny v tabulce procesů v systému. Mezerou je, že z nějakého důvodu nebyl tento proces vyčištěn rodičem z tabulky procesu. Obvykle se to stane po dokončení procesu provádění.

Obvyklý způsob provozu v systému Linux je, že poté, co proces dokončí své spuštění, upozorní svého rodiče, který je zodpovědný za odebrání procesu z tabulky. Rodič bohužel nemůže odebrat proces z paměti v případech, kdy rodič nemůže přečíst stav dítěte. Tak se stane, že v tabulce procesů máme mrtvé procesy. Tomu říkáme procesy zombie.

Co způsobuje procesy Linux Zombie?

Když je vytvořen podřízený proces, špatně napsaný nadřazený proces může selhat při volání funkce wait (). Výsledkem je, že jeho děti zombie budou v paměti setrvat, dokud nebudou uhaseny.

To znamená, že nic nesleduje vývoj stavu kojeneckého procesu a signál SIGCHLD bude ignorován. Možná, že do provádění nadřazeného procesu zasahuje jiná aplikace, a to buď mizerným programováním, nebo zákeřným záměrem.

Správný úklid systému nenastane, pokud nadřazený proces nesleduje změny stavu v podřízeném procesu.

Když proces kojence skončí, PCB a položka v tabulce procesu nebudou odstraněny. V důsledku toho se stav zombie z PCB nikdy neodstraní.

Zombie sice mají nějakou paměť, ale obvykle to není problém. Vzhledem k tomu, že systémy Linux mají konečný počet PID (i když je jich velké množství), je-li dostatek PID zombie, nemůže spustit žádný jiný proces. Je pochybné, že se to stane.

Procesy zombie však naznačují, že se v aplikaci něco pokazilo a že konkrétní program může mít chybu.
Softwarové chyby v datových centrech by neměly být tolerovány a je třeba je řešit.
Měli byste dávat pozor a ničit procesy zombie, dokud nebude chyba odstraněna.

ID procesu nelze znovu použít, dokud není spuštěno, takže položka tabulky procesu je malá.
Protože deska plošných spojů je mnohem větší než položka tabulky procesů v 64bitovém operačním systému, je nepravděpodobné, že by způsobila nějaké problémy.

Množství paměti dostupné pro jiné procesy by mohlo být ovlivněno velkým počtem zombie. Pokud však máte tolik zombie, máte vážný problém s nadřazenou aplikací nebo chybu v operačním systému.

Co tedy uděláte, když se postup změní na zombie? Vystopujete a eliminujete procesy zombie.

Jak najít proces zombie?

Počáteční zastavení zabíjení procesu zombie v systému je nejprve jeho identifikace. Protože proces inicializace se po zombie pravidelně uklízí, vše, co musíte udělat, abyste se jich zbavili, je zničit proces, který je vytvořil.

Hlavní příkaz je rychlý způsob, jak zjistit, zda se ve vaší oblasti nenacházejí zombie. Abychom toho dosáhli, provedeme následující příkaz.

horní

nejvyšší výsledky příkazu

Počet zombie procesů v tomto systému bude zobrazen na výstupu. V našem případě výše máme 0 zombie.
Pomocí příkazu ps a jeho vložením do egrep můžeme získat jejich seznam. Státní vlajka pro procesy zombie je „Z“ a někdy uvidíte také „zaniklý“.

tuts @ fosslinux: ~ $ ps aux | egrep "Z | zaniklý"

Státní vlajka pro procesy zombie je Z nebo zanikla

Pojďme rozebrat různé části tohoto příkazu.

Z ve sloupci STAT výstupu identifikuje proces zombie.
[zaniklý] v posledním sloupci (PŘÍKAZ) výstupu také identifikuje proces zombie.

V ideálním případě není možné zabít proces Zombie, protože je mrtvý. Místo toho upozorníme rodiče, aby se pokusil přečíst stav procesu dítěte a nakonec je vyčistil od tabulky systému. Abychom tento proces spustili, pošleme signál SIGCHLD rodiči procesu. Identifikace ID nadřazeného procesu nebo takzvaného PID zahrnuje spuštění následujícího příkazu:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identifikace ID nadřazeného procesu

Po získání PID Zombie použijte příkaz SIGCHLD signál k dříve identifikovaným nadřazeným procesům.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

použijte povel SIGCHLD signál

V některých případech to proces Zombie nevymaže. To nás vyzývá k zapojení do plánu b nebo c. Předchozí znamená restartování nadřazeného procesu nebo zabití nadřazených procesů. Na druhou stranu druhé případy zahrnují provedení restartu systému, zvláště když by proces Zombie mohl způsobit výpadek nebo obrovský nárůst kvůli procesu Zombie.

Níže je uveden příkaz zabít nadřazený proces.

tuts @ fosslinux: ~ $ kill -9 

příkaz zabít nadřazený proces

V případě, že je nadřazený proces zabit, rozšířením jsou zabity také všechny podřízené procesy daného rodiče. V případě, že jeden z podřízených procesů je v danou dobu kritický, budete možná muset odložit zabíjení, dokud nebude bezpečné. Na druhou stranu, rychlá dvojitá kontrola vám může říci, kolik paměti nebo procesní energie procesy Zombie spotřebovávají. To pomáhá určit, zda je lepší možností zabít nadřazený procesor, aby provedl restart systému v následujícím cyklu údržby systému, který je již naplánován.

Jak v systému Linux fungují stavy procesů?

Linux samozřejmě musí sledovat všechny aplikace a démony spuštěné ve vašem počítači. Údržba tabulky procesů je jedním ze způsobů, jak toho dosáhnout.
Toto je seznam struktur paměti jádra. Tento seznam obsahuje záznam pro každý proces, který obsahuje některé informace o něm. Každá ze struktur tabulky procesů obsahuje velmi málo informací.

Ukládají ID procesu, několik dalších informací a ukazatel na řídicí blok procesu (PCB).

PCB je místo, kde Linux ukládá všechny informace, které potřebuje k vyhledání nebo nastavení pro každý proces. Jak je proces vytvořen, je upraven, daný čas zpracování a poté zničen.

Na desce plošných spojů Linuxu je více než 95 polí. Je to definováno ve struktuře úkolů, která je dlouhá přes 700 řádků. Na desce plošných spojů lze nalézt následující druhy informací:

Stavy procesu jsou ilustrovány níže

„Stavem procesu“ může být kterákoli z následujících možností:

Závěr

Pokud nejsou součástí obrovské hordy, nejsou zombie tak škodlivé. Několik z nich není velký problém a rychlé restartování je vymaže. Je však třeba vzít v úvahu jeden bod.

Linuxové architektury mají maximální počet procesů a ve výsledku maximální počet identifikačních čísel procesů. Po dosažení maximálního počtu zombie procesů v počítači nelze spustit nové procesy.

Zombie procesy nejsou procesy; jsou to pozůstatky mrtvých procesů, které jejich nadřazený proces správně nevyčistil. Pokud si však všimnete, že konkrétní aplikace nebo proces neustále vytváří zombie, měli byste to prozkoumat dále.

S největší pravděpodobností je to jen špatně napsaný program; v takovém případě možná existuje aktualizovaná verze, která se vyčistí poté, co její podřízené procesy správně.

Hry Výukový program Shadow of the Tomb Raider pro Linux
Výukový program Shadow of the Tomb Raider pro Linux
Shadow of the Tomb Raider je dvanáctý přírůstek do série Tomb Raider - série akčních adventur vytvořená Eidosem Montrealem. Tato hra byla docela dobře...
Hry Jak zvýšit FPS v Linuxu?
Jak zvýšit FPS v Linuxu?
FPS znamená Snímků za sekundu. Úkolem FPS je měřit snímkovou frekvenci při přehrávání videa nebo herních výkonech. Jednoduše řečeno, počet nepřerušova...
Hry Nejlepší hry Oculus App Lab
Nejlepší hry Oculus App Lab
Pokud jste vlastníkem náhlavní soupravy Oculus, musíte mít informace o bočním nakládání. Sideloading je proces instalace neukládaného obsahu do náhlav...