Naučte sa Linux

Ako zabiť procesy Zombie v systéme Linux

Ako zabiť procesy Zombie v systéme Linux

Proces zombie v systéme Linux odkazuje na tie už mŕtve procesy, ale tak či onak sú stále prítomné v procesnej tabuľke systému. Medzera je v tom, že z nejakého dôvodu rodič tento proces z tabuľky procesov nevyčistil. Spravidla sa to stane po dokončení procesu vykonávania.

Obvyklý spôsob fungovania v systéme Linux je, že keď proces dokončí svoje vykonávanie, upozorní svojho rodiča, ktorý je zodpovedný za odstránenie procesu z tabuľky. Rodič, bohužiaľ, nedokáže proces odstrániť z pamäte v prípadoch, keď rodič nedokáže prečítať stav dieťaťa. Takto sa zistí, že v tabuľke procesov máme mŕtve procesy. Toto sú procesy, ktoré nazývame zombie procesy.

Čo spôsobuje procesy Linux Zombie?

Keď je vytvorený podradený proces, zle napísaný nadradený proces môže zlyhať pri volaní funkcie wait (). Výsledkom bude, že jej zombie deti zostanú v pamäti, kým nebudú uhasené.

To znamená, že nič nesleduje vývoj stavu dieťaťa a proces SIGCHLD bude ignorovaný. Možno iná aplikácia zasahuje do vykonávania nadradeného procesu, a to buď mizerným programovaním, alebo škodlivým úmyslom.

Správne upratovanie systému sa nevyskytne, ak nadradený proces nesleduje zmeny stavu v podradenom procese.

Po dokončení procesu pre kojencov sa PCB a záznam v tabuľke procesu neodstránia. Následkom toho sa stav zombie z PCB nikdy neodstráni.

Zombie síce majú nejakú pamäť, ale zvyčajne to nie je problém. Pretože systémy Linux majú konečný počet PID (aj keď ich je veľké množstvo), ak je dostatok PID zombie, nemôže sa spustiť žiadny iný proces. Je pochybné, že sa tak stane.

Procesy zombie však naznačujú, že sa s aplikáciou niečo pokazilo a že konkrétny program môže obsahovať chybu.
Chyby softvéru v dátových centrách by nemali byť tolerované a je potrebné ich riešiť.
Mali by ste dávať pozor na a ničiť procesy zombie, kým sa chyba neodstráni.

ID procesu je možné znovu použiť až po jeho spustení, takže záznam tabuľky procesu je malý.
Pretože doska plošných spojov je oveľa väčšia ako položka tabuľky procesov v 64-bitovom operačnom systéme, je nepravdepodobné, že by spôsobila nejaké problémy.

Množstvo pamäte dostupné pre iné procesy mohlo byť ovplyvnené veľkým počtom zombie. Ak však máte toľko zombie, máte vážny problém s nadradenou aplikáciou alebo chybu v operačnom systéme.

Čo teda urobíte, keď sa z postupu stane zombie? Vystopujete a eliminujete procesy zombie.

Ako nájsť zombie proces?

Počiatočné zastavenie zabitia procesu zombie v systéme je najskôr jeho identifikácia. Pretože proces init pravidelne čistí po zombie, musíte sa ich len zbaviť a zničiť proces, ktorý ich vytvoril.

Vrchný príkaz predstavuje rýchly spôsob, ako zistiť, či sa vo vašej oblasti nenachádzajú zombie. Aby sme to dosiahli, vykonáme nasledujúci príkaz.

hore

výsledky najvyšších príkazov

Počet procesov zombie v tomto systéme sa zobrazí na výstupe. V našom prípade vyššie máme 0 zombie.
Pomocou príkazu ps a vložením do programu egrep môžeme získať ich zoznam. Štátna vlajka pre procesy zombie je „Z“ a niekedy uvidíte aj „zaniknutý“.

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

Štátna vlajka pre procesy zombie je Z alebo zanikla

Rozoberme si rôzne časti tohto príkazu.

Z v stĺpci STAT výstupu identifikuje zombie proces.
[zaniknutý] v poslednom (PRÍKAZ) stĺpci výstupu tiež identifikuje proces zombie.

V ideálnom prípade nie je možné zabiť proces Zombie, pretože je mŕtvy. Namiesto toho upozorníme rodiča, aby sa pokúsil prečítať stav procesu dieťaťa, a nakoniec ho vyčistíme od tabuľky systému. Na spustenie tohto procesu pošleme signál SIGCHLD rodičovi procesu. Identifikácia nadradeného ID procesu alebo toho, čo sa nazýva PID, zahŕňa spustenie nasledujúceho príkazu:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identifikácia nadradeného ID procesu

Po získaní PID Zombie použite príkazový signál SIGCHLD na predtým identifikované nadradené procesy.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

použije príkazový signál SIGCHLD

V niektorých prípadoch to proces Zombie nevymaže. Toto nás vyzýva, aby sme sa zapojili do plánu b alebo c. Predchádzajúci znamená reštartovanie nadradeného procesu alebo zabitie nadradeného procesu. Na druhej strane, posledné prípady zahŕňajú vykonanie reštartu systému, najmä keď by proces Zombie mohol spôsobiť výpadok alebo obrovský nárast kvôli procesu Zombie.

Nižšie je uvedený príkaz na zabitie rodičovského procesu.

tuts @ fosslinux: ~ $ kill -9 

príkaz zabiť nadradený proces

V prípade, že je nadradený proces zabitý, rozšírením sú zabité aj všetky podradené procesy daného rodiča. V prípade, že je jeden z detských procesov v danom čase kritický, bude pravdepodobne potrebné odložiť zabitie, kým nebude bezpečné. Na druhej strane, rýchla dvojitá kontrola vám môže povedať, koľko pamäte alebo procesnej sily procesy Zombie spotrebúvajú. To pomáha určiť, či je lepšou možnosťou zabiť rodičovský procesor, aby vykonal reštart systému v nasledujúcom cykle údržby systému, ktorý je už naplánovaný.

Ako v systéme Linux fungujú stavy procesov?

Linux samozrejme musí mať prehľad o všetkých aplikáciách a démonoch, ktoré sú spustené vo vašom počítači. Udržiavanie tabuľky procesov je jedným zo spôsobov, ako to dosiahnuť.
Toto je zoznam štruktúr pamäte jadra. Tento zoznam obsahuje záznam pre každý proces, ktorý obsahuje niektoré informácie o ňom. Každá zo štruktúr procesnej tabuľky obsahuje veľmi málo informácií.

Ukladajú ID procesu, niekoľko ďalších informácií a ukazovateľ na riadiaci blok procesu (PCB).

PCB je miesto, kde Linux ukladá všetky informácie, ktoré potrebuje na vyhľadanie alebo nastavenie každého procesu. Počas vytvárania sa proces upravuje, čas spracovania a potom sa ničí.

Na PCB s Linuxom je viac ako 95 polí. Je to definované v štruktúre úloh, ktorá má viac ako 700 riadkov. Na PCB možno nájsť nasledujúce druhy informácií:

Stavy procesu sú ilustrované nižšie

„Stav procesu“ môže byť ktorýkoľvek z nasledujúcich stavov:

Záver

Ak nie sú súčasťou obrovskej hordy, zombie nie sú také škodlivé. Niektoré z nich nie sú veľkým problémom a rýchly reštart ich vymaže. Je však potrebné vziať do úvahy jeden bod.

Architektúry systému Linux majú maximálny počet procesov a vo výsledku maximálny počet identifikačných čísel procesov. Keď sa v počítači dosiahne maximálny počet procesov zombie, nové procesy nemožno spustiť.

Zombie procesy nie sú procesy; sú to pozostatky mŕtvych procesov, ktoré ich materský proces správne nevyčistil. Ak si však všimnete, že konkrétna aplikácia alebo proces neustále vytvára zombie, mali by ste to preskúmať ďalej.

S najväčšou pravdepodobnosťou je to iba zle napísaný program; v takom prípade možno existuje aktualizovaná verzia, ktorá sa vyčistí po správnom spracovaní jej potomka.

Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...
Hry Najlepšie hry na hranie s ručným sledovaním
Najlepšie hry na hranie s ručným sledovaním
Oculus Quest nedávno predstavil skvelú myšlienku ručného sledovania bez ovládačov. Vďaka stále sa zvyšujúcemu počtu hier a aktivít, ktoré vykonávajú p...
Hry Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Hranie hier na celú obrazovku alebo používanie aplikácií v režime rozptýlenia zadarmo na celú obrazovku vás môže odrezať od relevantných systémových i...