GNU/Linux >> Znalost Linux >  >> Linux

Jak zabít zombie procesy v Linuxu

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

Obvyklý způsob fungování v Linuxu je, že poté, co proces dokončí své provádění, upozorní svého rodiče, který je zodpovědný za odstranění procesu z tabulky. Rodič bohužel není schopen odstranit proces z paměti v případech, kdy rodič nemůže přečíst stav dítěte. Tak se stává, že v tabulce procesů máme mrtvé procesy. To je to, čemu říkáme zombie procesy.

Co způsobuje linuxové zombie procesy?

Když je vytvořen podřízený proces, může se stát, že špatně napsaný nadřazený proces zavolá funkci wait(). Výsledkem je, že jeho zombie děti zůstanou v paměti, dokud nebudou uhašeny.

To znamená, že u kojeneckého procesu nic nemonitoruje změny stavu a signál SIGCHLD bude ignorován. Možná jiná aplikace narušuje provádění nadřazeného procesu, ať už kvůli mizernému naprogramování nebo zlým úmyslům.

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

Po dokončení kojeneckého procesu nebude PCB a záznam v tabulce procesů odstraněn. V důsledku toho není zombie stav z PCB nikdy odstraněn.

Zombie mají nějakou paměť, ale to obvykle není problém. Protože linuxové systémy mají konečný počet PID (i když velký počet), je-li dostatek PID zombie, nelze spustit žádný další proces. Je pochybné, že k tomu dojde.

Zombie procesy však naznačují, že se s aplikací 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 zničte zombie procesy, dokud nebude chyba opravena.

ID procesu nelze znovu použít, dokud není spuštěno, takže záznam v tabulce procesů je malý.
Protože PCB je mnohem větší než záznam v tabulce procesů v 64bitovém operačním systému, je nepravděpodobné, že by to způsobilo nějaké problémy .

Množství paměti dostupné pro jiné procesy může 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 s chybou v operačním systému.

Co tedy dělat, když se procedura změní v zombie? Vystopujete a odstraníte zombie procesy.

Jak najít proces zombie?

Prvním zastavením zabíjení zombie procesu v systému je nejprve jeho identifikace. Protože proces init po zombiích pravidelně uklízí, jediné, co musíte udělat, abyste se jich zbavili, je zničit proces, který je vytvořil.

Horní příkaz je rychlý způsob, jak zjistit, zda jsou ve vaší oblasti nějací zombie. Abychom toho dosáhli, provedeme následující příkaz.

top

Počet zombie procesů v tomto systému se zobrazí na výstupu. V našem případě výše máme 0 zombie.
Pomocí příkazu ps a jeho vložením do egrepu 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|defunct"

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

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

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 pokusili přečíst stav procesu dítěte a nakonec je vyčistili ze systémové tabulky. Abychom tento proces spustili, pošleme signál SIGCHLD rodičovi procesu. Identifikace ID nadřazeného procesu nebo toho, co se nazývá PID, zahrnuje spuštění následujícího příkazu:

tuts@fosslinux:~$ ps -o ppid= <Child PID>

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

tuts@fosslinux:~$ kill -s SIGCHLD <Parent PID>

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

Níže je uveden příkaz k ukončení rodičovského procesu.

tuts@fosslinux:~$ kill -9 <Parent PID>

V případě, že dojde k zabití nadřazeného procesu, jsou tím pádem zabity i všechny podřízené procesy daného rodiče. V případě, že je některý z podřízených procesů v danou chvíli kritický, možná budete muset zabíjení odložit, dokud to nebude bezpečné. Na druhou stranu, rychlá dvojitá kontrola vám může říct, kolik paměti nebo výpočetního výkonu procesy Zombie spotřebovávají. To pomáhá určit, zda je lepší volbou zabít nadřazený procesor a provést 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 běžící na vašem počítači. Udržování 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ý o něm obsahuje nějaké informace. 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 pro každý proces vyhledat nebo nastavit. Jak je proces vytvořen, je modifikován, je mu přidělena doba zpracování a poté zničen.

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

Stavy procesu jsou znázorněny níže

  • Číslo procesu:Charakteristický identifikátor operačního systému.
  • Počítadlo programů:Když je tomuto procesu znovu udělen přístup k CPU, systém použije tuto adresu k vyhledání další instrukce procesu, která má být provedena.
  • Registry:Tento postup používá seznam registrů CPU nazývaných registry. V seznamu mohou být zahrnuty akumulátory, indexové registry a ukazatele zásobníku.
  • Otevřít seznam souborů:Soubory spojené s tímto postupem jsou zahrnuty v seznamu otevřených souborů.
  • Informace o plánování CPU:Používá se k výpočtu, jak často a jak dlouho tento proces přijímá dobu zpracování CPU.
    PCB musí zaznamenat prioritu procesu, ukazatele na plánovací fronty a další parametry plánování.
  • Informace o správě paměti:Informace o paměti, kterou tento proces používá, jako je počáteční a koncová adresa paměti procesu a také ukazatele na stránky paměti.
  • Informace o stavu I/O:Jakákoli zařízení, která proces používá jako vstupy nebo výstupy.

Stav procesu může být kterýkoli z následujících:

  • R:Běžící proces nebo proces, který lze spustit. Běží, což znamená, že získává a provádí cykly CPU.
    Procedura, která je připravena ke spuštění, čeká na slot CPU.
  • S:Akt spánku.
    Proces čeká na dokončení akce, jako je vstupní nebo výstupní operace. Nebo dostupnost zdroje.
  • D:Procedura je ve stavu nepřerušitelného spánku. Používá blokující systémové volání, což znamená, že nebude pokračovat, dokud nebudou dokončena systémová volání. Na rozdíl od stavu „Sleep“ nebude proces v tomto stavu reagovat na signály, dokud nebude dokončeno systémové volání a proces se nevrátí k provádění.
  • T:Protože dostal signál SIGSTOP, proces skončil (zastaven).
    Bude reagovat pouze na signály SIGKILL nebo SIGCONT, buď zabije nebo dá pokyn k pokračování. Když přepnete z úloh na popředí (fg) na pozadí (bg), stane se to.
  • Z:znamená Zombie Process. Když je proces dokončen, jednoduše nezmizí. Místo toho uvolní veškerou paměť, kterou aktuálně používá, a opustí paměť, ale jeho záznam v tabulce procesů a PCB zůstanou.
    Jeho stav je nastaven na EXIT ZOMBIE a jeho rodičovskému procesu je sděleno, že proces dítěte byl dokončen prostřednictvím signál SIGCHLD.

Závěr

Pokud nejsou součástí obrovské hordy, zombie nejsou tak škodlivé. Několik z nich není velký problém a rychlý restart je odstraní. Je však třeba zvážit jeden bod.

Linuxové architektury mají maximální počet procesů a v důsledku toho maximální počet ID čísel procesů. Když je v počítači dosaženo maximálního počtu zombie procesů, nové procesy nelze spustit.

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

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


Linux
  1. Jak zabít proces zombie na Linuxu

  2. Jak najít a zabít zombie proces v Linuxu

  3. Linux:Najděte a zabijte zombie procesy

  1. Co jsou zombie procesy a jak najít a zabít zombie procesy?

  2. Jak zabít běžící procesy v Linuxu

  3. Jak zabít proces v Linuxu pomocí příkazu?

  1. Jak zabít proces nebo zastavit program v Linuxu

  2. Jak zabít zombie proces

  3. Jak pozastavit/obnovit proces v Linuxu