Mi a „zombi folyamat” a Linuxon?
Ha Linux felhasználó vagy, akkor zombi folyamatokat láthatott a folyamatlistán. Nem lehet megölni egy zombi folyamatot, mert már halott - mint egy tényleges zombi.
A zombik alapvetően a halott folyamatok maradványbitjei, amelyeket nem tisztítottak meg megfelelően. A zombi folyamatokat létrehozó program nem megfelelően van programozva - a programoknak nem kell hagyniuk a zombi folyamatokat.
Képhitel: Daniel Hollister a Flickr-en (Remixed)
Mi az a zombi folyamat?
A zombi folyamatok megértéséhez és a zombi folyamatok megjelenéséhez meg kell értenie egy kicsit arról, hogy a folyamatok hogyan működnek a Linuxon.
Amikor egy folyamat meghal a Linuxon, akkor az nem kerül azonnal eltávolításra a memóriából - a folyamat leírója a memóriában marad (a folyamat leíró 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 gyermekprocesszusa a SIGCHLD jelzéssel meghalt. A szülő folyamatnak akkor kell végrehajtania a várakozási () rendszerhívást, hogy elolvassa a halott folyamat kilépési állapotát és egyéb információkat. Ez lehetővé teszi a szülő folyamat számára, hogy információt kapjon a halott folyamatból. A várakozás után () hívják a zombi folyamatot a memóriából.
Ez általában nagyon gyorsan történik, így nem fogod látni a zombi folyamatokat a rendszeredben. Ha azonban a szülő folyamat nem megfelelően van programozva, és soha nem hívja a várakozást (), a zombi gyermekei a memóriában maradnak, amíg meg nem tisztítják.
Segédprogramok, mint a GNOME System Monitor, a felső parancsot, és a ps parancs megjeleníti a zombi folyamatokat.
A zombi folyamatok veszélyei
A zombi folyamatok nem használják fel a rendszer erőforrásait. (Valójában mindegyik nagyon kis mennyiségű rendszermemóriát használ a folyamat leírójának tárolására.) Azonban minden zombi folyamat megőrzi folyamat ID-jét (PID). A Linux rendszerek véges számú folyamat-azonosítóval rendelkeznek - 32767 alapértelmezés szerint 32 bites rendszereken. Ha a zombik nagyon gyors ütemben halmozódnak fel - például, ha a helytelenül programozott kiszolgálószoftver zombi folyamatokat hoz létre terhelés alatt - a rendelkezésre álló PID-ek teljes készletét végül zombi folyamatokhoz rendezik, megakadályozva más folyamatok elindítását.
Azonban néhány zombi folyamat, ami körül van, nem jelent problémát - bár a rendszerben a szülő folyamatukkal kapcsolatos hibát jeleznek.
Megszabadulni a zombi folyamatoktól
Nem tudod megölni a zombi folyamatokat, mert a SIGKILL jel segítségével megölik a normál folyamatokat - a zombi folyamatok már halottak. Ne feledje, hogy nem kell megszabadulnia a zombi folyamatoktól, hacsak nincs nagy mennyiségű rendszered - néhány zombik ártalmatlanok. Van azonban néhány módja annak, hogy megszabaduljon a zombi folyamatoktól.
Az egyik módja a SIGCHLD jel elküldése a szülő folyamatnak. Ez a jel azt mondja a szülő folyamatnak, hogy végrehajtja a várakozási () rendszerhívást és tisztítsa meg a zombi gyermekeit. Küldje el a jelet a megöl parancsot 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 programozva és figyelmen kívül hagyja a SIGCHLD jeleket, ez nem segít. Meg kell ölnie vagy bezárnia a zombik szülő folyamatát. Amikor véget ér a zombik létrehozása, az init örökli a zombi folyamatokat, és az új szülővé válik. (Az init az első folyamat, amely a rendszerindításkor indult Linux-on, és hozzárendelt PID 1-hez.) Az init rendszeresen végrehajtja a várakozási () rendszerhívást, hogy megtisztítsa a zombi gyermekeit, így az init rövid munkát végez a zombikról. Újraindíthatja a szülő folyamatot, miután bezárta.
Ha egy szülő folyamat folytatja a zombik létrehozását, akkor azt meg kell erősíteni, hogy megfelelően hívja () a zombi gyermekeit. Adjon meg egy hibajelentést, ha a rendszeren lévő program továbbra is zombik létrehozását teszi lehetővé.