Zombifolyamatok Linuxban: Megkeresés, eltávolítás, megelőzés

15 perc olvasás - 2026. május 19.

hero section cover
Tartalomjegyzék
  • Zombi folyamatok Linuxban: hogyan lehet őket megtalálni és eltávolítani
  • Miért fontosak a zombi folyamatok a szervereken
  • Hogyan lehet megtalálni a zombi folyamatokat
  • Hogyan lehet eltávolítani a zombi folyamatokat
  • A zombi folyamatok megelőzése
  • Következtetés
Megosztás

Ismerje meg, hogyan azonosíthatja, távolíthatja el és akadályozhatja meg a zombi-folyamatokat Linuxban. Parancsok, kódjavítások és felügyeleti tippek szerveradminok számára.

Zombi folyamatok Linuxban: hogyan lehet őket megtalálni és eltávolítani

A zombi folyamat egy olyan gyermekfolyamat, amelynek végrehajtása befejeződött, de még mindig elfoglal egy helyet a kerneltáblában. Azért létezik, mert a szülőfolyamat nem hívta meg a wait() hívást a kilépési állapotának lekérésére. A zombik nem fogyasztanak CPU-t vagy memóriát, de mindegyik rendelkezik PID-vel. Ha elég sok halmozódik fel belőlük, a rendszer nem tud új folyamatokat indítani. Ez a bejegyzés bemutatja, hogyan lehet felismerni, eltávolítani őket, és megakadályozni, hogy egyáltalán megjelenjenek.


 

Miért fontosak a zombi folyamatok a szervereken

Egyetlen zombi folyamat ártalmatlan. A probléma akkor kezdődik, amikor felhalmozódnak. A Linux PID-térkészlete véges: 32 bites rendszereken 32 768, 64 bites rendszereken pedig legfeljebb 4 194 304. Ha a zombi folyamatok kitöltik a folyamat táblát, a rendszermag nem tud új folyamatokat létrehozni. Ez azt jelenti, hogy nincsenek új kapcsolatok, nincsenek új munkaszálak, nincs semmi új.

Az Apache és az Nginx webkiszolgálók különösen ki vannak téve ennek, mert gyermekfolyamatokat indítanak a forgalom kezelésére. A teljesítménytesztek azt mutatták, hogy 48%-kal csökken az átviteli sebesség, ha zombik halmozódnak fel egy forgalmas webkiszolgálón. 2019-ben egy Kubernetes DNS-podban lévő Golang-csatorna szivárgás több mint 26 000 zombit hozott létre egyetlen csomóponton, megtöltve a folyamat táblát és összeomlasztva a DNS-feloldást a klaszter egészében.

Az alábbi táblázat bemutatja a normál folyamatok és a zombik közötti legfontosabb különbségeket:

JellemzőNormál folyamatZombi folyamat
Állapot szimbólumR, S, D vagy TZ (megszűnt)
CPU / MemóriaAktív használat0% / 0 (már lezárult)
Folyamat táblázat bejegyzésEgy helyEgy hely
Válasz kill -9Azonnal megszűnikNincs hatása (már leállt)
Kernel memóriaTeljes folyamatleíróCsak minimális kilépési állapot

A legfontosabb tanulság: nem lehet kill -9 egy zombit. Az már halott. Az egyetlen módja annak, hogy eltávolítsuk, ha a szülő folyamatot arra késztetjük, hogy azt begyűjtse, vagy megöljük a szülőt, így init (PID 1) automatikusan örökölje és eltávolítsa.

Hogyan lehet megtalálni a zombi folyamatokat

A zombik a STAT oszlopban Z betűvel jelennek meg, <defunct> a parancsnév mellett. A következő paranccsal listázhatja őket:

ps aux | grep -w Z

A szülőfolyamat azonosítójának (PPID) megtekintéséhez, amelyre az eltávolításhoz szükség lesz:

ps -eo pid,ppid,stat,comm | grep -w Z

A top parancs a fejlécsorában a zombik teljes számát is megjeleníti. Gyors, nem interaktív ellenőrzéshez:

top -bn1 | grep zombie

A szülő folyamat nyomon követése a pstree paranccsal

Miután megvan a zombi PID-je, nyomozza vissza a felelős szülőig:

pstree -p -s <zombie_pid>

Ez megmutatja a teljes ősök sorát init a zombiig. Ha pstree nem van telepítve, ps auxf hasonló ASCII fa nézetet ad.

Zombik számlálása a felügyelethez

Tiszta számlálás, amely kizárja magát a grep folyamatot:

ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'

Folyamatos figyeléshez hibaelhárítás közben:

watch -n 1 'ps aux | grep -w Z | wc -l'

Hogyan lehet eltávolítani a zombi folyamatokat

A zombik csak a kilépési állapotuk összegyűjtésével távolíthatók el. Ez azt jelenti, hogy a szülőfolyamaton keresztül kell elvégezni a műveletet.

1. Keresse meg a szülőfolyamatot.

ps -o ppid= -p <zombie_pid>

2. Jelezze a szülőnek, hogy szüntesse meg gyermekeit.

kill -SIGCHLD <parent_pid>

Ez arra utasítja a szülőt, hogy hívja meg wait() hívást bármely lezárt gyermekre. Ez nem zavarja a rendszert, és jól viselkedő alkalmazások esetén működik.

3. Ha a SIGCHLD nem működik, indítsa újra a szolgáltatást.

systemctl restart <service_name>

4. Ha a szülő nem válaszol, öljük meg.

kill <parent_pid>

Vagy ha figyelmen kívül hagyja a SIGTERM-et:

kill -9 <parent_pid>

Amikor a szülőprogram leáll, init (PID 1) vagy systemd fogadja be az árva zombikat, és azonnal megsemmisíti őket. Legyen óvatos a termelési rendszereken. A szülőprogram leállítása az összes aktív gyermekprogramot is leállítja.

5. Ellenőrizd a tisztítást.

ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'

Ha a szám 0, akkor minden rendben van.

A zombi folyamatok megelőzése

Kezelje a gyermekfolyamatokat a kódjában

A legtöbb zombi felhalmozódásának kiváltó oka egy olyan szülőfolyamat, amely soha nem hívja meg a wait(). Javítsa ki a forráskódban:

  • C: Állítsa be signal(SIGCHLD, SIG_IGN); -t úgy, hogy automatikusan eldobja a gyermekfolyamatok kilépési adatait, vagy használjon egy jelkezelőt waitpid(-1, NULL, WNOHANG) az aszinkron begyűjtéshez.
  • Python: Használja subprocess.run(), amely automatikusan várakozik. Ha Popen, hívja meg proc.wait() -t.
  • Bash: Adja hozzá wait a háttérfeladatokat elindító szkriptek végére.

Állítsa be megfelelően a systemd-t

A systemd által kezelt szolgáltatások esetében ezek a beállítások megakadályozzák a zombi folyamatok felhalmozódását:

  • KillMode=control-group biztosítja, hogy a szolgáltatás leállásakor az összes gyermekfolyamat egyszerre fejeződjön be.
  • TimeoutStopSec időt ad a szülőnek a gyermekek felszámolására, mielőtt a systemd SIGKILL-t küldene.
  • WatchdogSec automatikusan újraindítja a nem reagáló szolgáltatásokat, kezelve azokat az eseteket, amikor a szülő folyamat lefagy és leáll a leállítás.

Figyelje a folyamat táblázatot

Állítson be egy cron feladatot, amely 15 percenként fut, hogy megszámolja a zombikat, és riasztást küldjön, ha a szám meghaladja a küszöbértéket:

ps aux | awk '$8 ~ /Z/' | wc -l

Figyelje a folyamat táblázat használatát is azáltal, hogy összehasonlítja az aktuális számot a /proc/sys/kernel/pid_max. Ha meghaladja a 80%-ot, vizsgálja meg a helyzetet, mielőtt problémává válna. Néhány átmeneti zombi a normál működés során nem ok aggodalomra. A növekvő szám, amely nem csökken vissza nullára, egy alkalmazási hibára utal, amelyet javítani kell.

Következtetés

A zombi folyamatok olyan elhalt folyamatok, amelyeket nem töröltek. Nem használnak CPU-t vagy memóriát, de foglalják a PID-eket, és egy teli folyamat táblázat megakadályozza a szervert abban, hogy bármi hasznosat végezzen.

  • Keresse meg őket a ps aux | grep -w Z parancsokkal, a szülőfolyamatot pedig a pstree.
  • Távolítsa el őket úgy, hogy SIGCHLD parancsot az anyaprocessznek, a szolgáltatás újraindításával, vagy végső esetben az anyaprocessz leállításával.
  • Megelőzheti őket úgy, hogy olyan kódot ír, amely meghívja a wait(), a systemd helyes konfigurálásával és a folyamat táblázat figyelemmel kísérésével.

Ha nagy forgalmú munkaterheléseket futtat, és megbízható infrastruktúrára van szüksége teljes root-hozzáféréssel, az FDC dedikált szerverei teljes ellenőrzést biztosítanak a folyamatkezelés és a rendszerkonfiguráció felett.

Blog

Kiemelt ezen a héten

További cikkek
Zombifolyamatok Linuxban: Megkeresés, eltávolítás, megelőzés

Zombifolyamatok Linuxban: Megkeresés, eltávolítás, megelőzés

Ismerje meg, hogyan azonosíthatja, távolíthatja el és akadályozhatja meg a zombi-folyamatokat Linuxban. Parancsok, kódjavítások és felügyeleti tippek szerveradminok számára.

15 perc olvasás - 2026. május 19.

Linux-kiszolgáló keményítésének ellenőrző listája

15 perc olvasás - 2026. május 8.

További cikkek
background image

Kérdése van, vagy egyedi megoldásra van szüksége?

icon

Rugalmas lehetőségek

icon

Globális elérés

icon

Azonnali telepítés

icon

Rugalmas lehetőségek

icon

Globális elérés

icon

Azonnali telepítés