Tanuljon Linuxot

Hogyan lehet megölni a Zombie folyamatokat Linux alatt

Hogyan lehet megölni a Zombie folyamatokat Linux alatt

A zombi folyamat a Linuxban azokra a már lejárt folyamatokra utal, amelyek így vagy úgy mégis jelen vannak a rendszer folyamattáblájában. A kiskapu az, hogy valamilyen oknál fogva ezt a folyamatot a szülő nem törölte ki a folyamat táblázatból. Ez általában a végrehajtási folyamat befejezése után történik.

A Linux rendszeres működési módja az, hogy miután egy folyamat befejezte a végrehajtást, értesíti a szülőjét, amely felelős a folyamat eltávolításáért a táblából. Sajnos a szülő nem tudja eltávolítani a folyamatot a memóriából olyan esetekben, amikor a szülő nem tudja elolvasni a gyermek állapotát. Így fordulhat elő, hogy a folyamat táblában halott folyamatok vannak. Ezeket nevezzük zombi folyamatoknak.

Mi okozza a Linux Zombie folyamatokat?

A gyermekfolyamat létrehozásakor előfordulhat, hogy egy rosszul megírt szülői folyamat nem hívja meg a wait () függvényt. Ennek eredményeként zombi gyermekei addig maradnak az emlékezetben, amíg ki nem oltják őket.

Ez azt jelenti, hogy semmi sem figyeli a csecsemő folyamatát az állapotváltozások szempontjából, és a SIGCHLD jelet figyelmen kívül hagyják. Talán egy másik alkalmazás zavarja a szülői folyamat végrehajtását, akár tetves programozással, akár rosszindulatú szándékkal.

A rendszer megfelelő takarítása nem fog bekövetkezni, ha a szülői folyamat nem figyeli az állapotváltozásokat a gyermek folyamatában.

Amikor a csecsemő folyamat befejeződik, a NYÁK és a folyamattábla bejegyzése nem lesz eltávolítva. A zombi állapotot ennek eredményeként soha nem távolítják el a NYÁK-ról.

A zombiknak van némi memóriájuk, de ez általában nem jelent problémát. Mivel a Linux rendszerek véges számú PID-vel rendelkeznek (bár nagy számmal), ha elegendő PID-t zombáznak, más folyamat nem indulhat el. Kétséges, hogy ez megtörténik-e.

A zombi folyamatok azonban arra utalnak, hogy valami rosszul esett egy alkalmazással, és hogy egy adott program hibát tartalmazhat.
Az adatközpontokban lévő szoftverhibákat nem szabad tolerálni, és meg kell oldani őket.
Figyelnie kell és meg kell semmisítenie a zombi folyamatokat, amíg a hiba kijavul.

A folyamatazonosító addig nem használható fel, amíg el nem indul, ezért a folyamattábla bejegyzése apró.
Mivel a NYÁK sokkal nagyobb, mint egy 64 bites operációs rendszer folyamattáblájának bejegyzése, ez valószínűleg nem okoz problémát.

Az egyéb folyamatokhoz rendelkezésre álló memória mennyiségét nagyszámú zombi befolyásolhatja. Ha azonban ennyi zombija van, akkor komoly problémája van a szülőalkalmazással vagy az operációs rendszer hibájával.

Szóval, mit csinálsz, ha egy eljárás zombivá változik?? Felkutatja és megszünteti a zombi folyamatokat.

Hogyan lehet megtalálni a zombi folyamatot?

A rendszerben egy zombi folyamat megölésének kezdeti állomása az, hogy először azonosítsuk azt. Mivel az init folyamat rendszeresen tisztul a zombik után, csak annyit kell tennie, hogy megszabaduljon tőlük, csak meg kell semmisítenie a folyamatot.

A legfelső parancs segítségével gyorsan megtudhatja, hogy vannak-e zombik a környéken. Ennek elérése érdekében a következő parancsot hajtjuk végre.

tetejére

felső parancs eredményei

Ebben a rendszerben a zombi folyamatok száma megjelenik a kimeneten. A fenti esetünkben 0 zombink van.
A ps paranccsal és az egrep-be beillesztve listát kaphatunk róluk. A zombi folyamatok állami zászlója „Z”, és néha „megszűntet” is láthat.

tuts @ fosslinux: ~ $ ps aux | egrep "Z | megszűnt"

A zombi folyamatok állami zászlója Z vagy megszűnt

Bontjuk le ennek a parancsnak a különféle szakaszait.

A kimenet STAT oszlopában a Z egy zombi folyamatot azonosít.
A [defunct] a kimenet utolsó (COMMAND) oszlopában egy zombi folyamatot is azonosít.

Ideális esetben nem lehet megölni egy zombi folyamatot, mert az halott. Ehelyett értesítjük a szülőt, hogy próbálkozzon és olvassa el a gyermek folyamatállapotát, és végül törölje őket a rendszer táblázatából. Ennek a folyamatnak az elindításához SIGCHLD jelet küldünk a folyamat szülőjének. A szülő folyamatazonosító vagy az úgynevezett PID azonosítása a következő parancs futtatásával jár:

tuts @ fosslinux: ~ $ ps -o ppid = 

A szülő folyamatazonosító azonosítása

A Zombie PID megszerzése után használja a SIGCHLD jelet a korábban azonosított szülői folyamatokhoz.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

használja a SIGCHLD jel parancsot

Bizonyos esetekben ez nem tisztázza a Zombie folyamatot. Ez arra hív bennünket, hogy vegyünk részt a b vagy c tervben. Az előzetes a szülő folyamat újraindítását vagy a szülő folyamatok megölését vonja maga után. Másrészt az utóbbi esetek a rendszer újraindítását jelentik, különösen akkor, ha a Zombie folyamat kiesést vagy hatalmas túlfeszültséget okozhat a Zombie folyamat miatt.

Az alábbiakban bemutatjuk a szülő folyamat megölésének parancsát.

tuts @ fosslinux: ~ $ kill -9 

parancs a szülői folyamat megölésére

Abban az esetben, ha egy szülő folyamatot megölnek, kiterjesztve az adott szülő összes gyermek folyamatát is megölik. Abban az esetben, ha az egyik gyermekfolyamat kritikus az adott pillanatban, akkor el kell halasztania a gyilkolást, amíg az biztonságos lesz. Másrészt egy gyors kettős ellenőrzés megmondhatja, hogy a Zombie-folyamatok mennyi memóriát vagy feldolgozási energiát fogyasztanak. Ez segít meghatározni, hogy a jobb megoldás-e megölni a szülőprocesszort a rendszer újraindításához a rendszer ütemezett karbantartásának következő ciklusában.

Linuxon hogyan működnek a folyamatok állapotai?

Természetesen a Linuxnak nyomon kell követnie a számítógépen futó összes alkalmazást és démonot. A folyamattábla fenntartása az egyik módja ennek.
Ez a kernel memória struktúráinak listája. Ez a lista minden folyamathoz tartalmaz egy bejegyzést, amely tartalmaz némi információt erről. A folyamattábla-struktúrák mindegyike nagyon kevés információt tartalmaz.

Tárolják a folyamatazonosítót, néhány további információt és egy mutatót a folyamatvezérlő blokkhoz (PCB).

A NYÁK az a hely, ahol a Linux tárolja az összes információt, amelyre szüksége van az egyes folyamatokhoz. A folyamat létrehozásakor módosítják, megadják a feldolgozási időt, majd megsemmisítik.

A Linux PCB-n több mint 95 mező található. A feladat struktúrában van meghatározva, amely több mint 700 sor hosszú. A következő típusú információk találhatók a NYÁK-on:

A folyamat állapotát az alábbiakban szemléltetjük

A következők bármelyike ​​lehet „Folyamatállapot”:

Következtetés

Hacsak nem egy hatalmas horda részei, a zombik nem annyira károsak. Néhány nem nagy ügy, és egy gyors újraindítás megtisztítja őket. Van azonban egy szempont, amelyet figyelembe kell venni.

A Linux architektúrák maximális számú folyamatot tartalmaznak, és ennek eredményeként a folyamatok azonosító számainak maximális számát. Amikor a számítógép maximális számú zombi folyamatot elér, új folyamatokat nem lehet elindítani.

A zombi folyamatok nem folyamatok; azok a holt folyamatok maradványai, amelyeket a szülői folyamat nem megfelelően tisztított meg. Ha azonban azt észleli, hogy egy adott alkalmazás vagy folyamat folyamatosan zombikat szít, akkor tovább kell vizsgálnia.

Valószínűleg ez csak egy rosszul megírt program; ebben az esetben talán van egy frissített verzió, amely kitisztul, miután gyermeke megfelelően feldolgozta.

Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...
Ezekkel az ingyenes eszközökkel adja hozzá az egérmozdulatokat a Windows 10 rendszerhez
Az elmúlt években a számítógépek és az operációs rendszerek nagymértékben fejlődtek. Volt idő, amikor a felhasználóknak parancsokkal kellett navigálni...
Az egér mozgásának vezérlése és kezelése több monitor között a Windows 10 rendszerben
Dual Display Mouse Manager lehetővé teszi az egér mozgásának vezérlését és konfigurálását több monitor között, lassítva annak mozgását a határ közeléb...