A zombik alapvetően a halott folyamatok maradék bitjei, amelyeket nem tisztítottak megfelelően. A zombi folyamatokat létrehozó program nem megfelelően van programozva - a programok nem szabad engedni a zombi folyamatoknak.
Mi a zombi folyamat?
Ahhoz, hogy megértsük, mi a zombi folyamat, és mi okozza a zombi folyamatok megjelenését, meg kell értened egy kicsit arról, hogy a folyamatok hogyan működnek a Linuxon.
Ha egy folyamat Linuxon hal meg, akkor a memória nem azonnal távolítja el a memóriából - folyamatleírója a memóriában marad (a folyamatleíró csak csak kis mennyiségű memóriát vesz igénybe). A folyamat státusza EXIT_ZOMBIE lesz, és a folyamat szülője értesül arról, hogy gyermekprocessje meghalt a SIGCHLD jelzéssel. A szülőfolyamatnak végre meg kell valósítania a wait () rendszerhívást, hogy elolvassa a halott folyamat kilépési állapotát és egyéb adatait. Ez lehetővé teszi, hogy a szülői folyamat megkapja az adatokat a halott folyamattól. Várakozás után () hívják, a zombi folyamat teljesen eltávolodik a memóriából.
Ez rendszerint nagyon gyorsan megtörténik, így nem fognak látni zombi folyamatokat felhalmozódva a rendszereden. Ha azonban a szülőfolyamat nem megfelelően van beprogramozva, és soha nem hívja meg a várást (), akkor a zombi gyermekek a memóriában maradnak, amíg megtisztítják őket.
Olyan segédprogramok, mint a GNOME System Monitor, a felső parancsot, és a ps parancsok megjelenítése zombi folyamatok.
A zombi folyamatok veszélyei
A zombi folyamatok nem használnak semmilyen rendszer erőforrást. (Valójában mindegyik nagyon kevés rendszermemóriát használ a folyamatleíró leírása érdekében.) Mindazonáltal minden zombi folyamat megőrzi folyamatazonosítóját (PID). A Linux rendszerek véges számú folyamatazonosítót tartalmaznak - 32767 alapértelmezés szerint 32 bites rendszereken. Ha a zombik nagyon gyorsan felgyulladnak - például ha a helytelenül programozott szerver szoftver zombi folyamatokat terhelés alatt állít fel - a rendelkezésre álló PID-ek teljes csoportját végül zombi folyamatokhoz rendelik, megakadályozva ezzel az egyéb folyamatok indítását.
Azonban néhány zombi folyamatban lógó körülmény nem jelent problémát - bár ezek a hibák a szülőfolyamattal kapcsolatosak a rendszeren.
Megszabadulni a zombi folyamatoktól
Nem tudsz megölni a zombi folyamatokat, mivel meg tudod ölni a normális folyamatokat a SIGKILL jelzéssel - a zombi folyamatok már halottak. Ne feledje, hogy nem kell megszabadulniuk a zombi folyamatoktól, hacsak nem nagy mennyiségű a rendszered - néhány zombik ártalmatlanok. Van azonban néhány módja, hogy megszabaduljon a zombi folyamatoktól.
Az egyik mód az, ha a SIGCHLD jelet elküldi a szülői folyamatnak. Ez a jel azt mondja a szülő folyamatnak, hogy végrehajtsa a váró () rendszerhívást és tisztítsa meg a zombi gyermekeket. Küldje a jelet a megöl parancs, helyettesítés pid az alábbi parancsban a szülőfolyamat PID-jével:
kill -s SIGCHLD pid
Ha azonban a szülőfolyamat nem megfelelően van beprogramozva, és figyelmen kívül hagyja a SIGCHLD jeleket, ez nem segít. Meg kell ölnöd vagy bezárnod a zombik szülőfolyamatát. Amikor a zombik létrehozásának folyamata véget ér, az init örökli a zombi folyamatokat és új szülővé válik. (az init az első olyan folyamat, amelyet bootoláskor indítottak Linuxon, és PID 1-re van rendelve.) init rendszeresen végrehajtja a váró () rendszerhívást a zombi gyermekek megtisztítására, így az init rövid zombi munkát végez. A szülőfolyamatot a bezárás után újraindíthatja.
Ha egy szülőfolyamat továbbra is zombikat hoz létre, azt úgy kell rögzíteni, hogy megfelelően felhívja a wait () -ot arra, hogy elnyerje a zombi gyermekét. Fájljon be egy hibajelentést, ha egy rendszeren lévő program továbbra is zombik létrehozását teszi.