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
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"
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 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
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
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
- Folyamat száma: Az operációs rendszer megkülönböztető azonosítója.
- Programszámláló: Amikor ennek a folyamatnak ismét hozzáférést biztosít a CPU-hoz, a rendszer ezt a címet használja a végrehajtandó folyamat következő utasításainak megkeresésére.
- Regiszterek: Ez az eljárás a CPU regiszterek listájának nevét használja. Akkumulátorok, indexregiszterek és veremmutatók szerepelhetnek a listán.
- Nyitott fájllista: Az eljáráshoz társított fájlok az Open File List-ban találhatók.
- CPU ütemezési információk: Arra szolgál, hogy kiszámítsa, milyen gyakran és mennyi ideig kapja meg ez a folyamat a CPU feldolgozási idejét.
A NYÁK-nak rögzítenie kell a folyamat prioritását, az ütemezési sorokra mutató mutatókat és az egyéb ütemezési paramétereket. - Memóriakezelési információk: Információ a folyamat által használt memóriáról, például a folyamatmemória kezdő és befejező címe, valamint a memória oldalakra mutató mutatók.
- Információ az I / O állapotról: Bármely eszköz, amelyet a folyamat bemenetként vagy kimenetként használ.
A következők bármelyike lehet „Folyamatállapot”:
- R: Futó vagy futtatható folyamat. Ez fut, ami azt jelenti, hogy megszerzi és végrehajtja a CPU-ciklusokat.
Futtatásra kész eljárás vár egy CPU-foglalatra. - S: Az alvás cselekedete.
A folyamat egy művelet, például egy bemeneti vagy kimeneti művelet befejezésére vár. Vagy egy erőforrás elérhetősége. - D: Az eljárás nem megszakítható alvás állapotban van. Blokkoló rendszerhívást használ, ami azt jelenti, hogy addig nem folytatja, amíg a rendszerhívások nem fejeződnek be. Az „alvó” állapottal ellentétben egy folyamat ebben az állapotban nem reagál a jelekre, amíg a rendszerhívás nem fejeződik be, és a végrehajtás nem tér vissza a folyamathoz.
- T: Mivel megkapta a SIGSTOP jelet, a folyamat véget ért (leállt).
Csak a SIGKILL vagy SIGCONT jelekre reagál, akár megöli, akár utasítja a folyamat folytatását. Amikor az előtérről (fg) a háttér (bg) feladatokra vált, ez megtörténik. - Z: a Zombie Process rövidítése. Amikor egy folyamat befejeződik, nem egyszerűen eltűnik. Ehelyett felszabadít minden memóriát, amelyet jelenleg használ, és kilép a memóriából, de a folyamattáblázat és a PCB megmarad.
Az állapota EXIT ZOMBIE, és a szülői folyamatról azt mondják, hogy a csecsemő folyamat a SIGCHLD jelen keresztül befejeződött.
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.