Zombiprotsessid Linuxis: Leia, eemalda, takista
15 min lugemine - 19. mai 2026

Õppige, kuidas tuvastada, eemaldada ja vältida zombiprotsesse Linuxis. Käsklused, koodiparandused ja seire näpunäited serverite administraatoritele.
Zombie-protsessid Linuxis: kuidas neid leida ja eemaldada
Zombie-protsess on alamprotsess, mis on täitmise lõpetanud, kuid hõivab endiselt koha tuuma protsessitabelis. See eksisteerib, kuna vanemprotsess ei ole kutsunud wait() selle lõpetamisstaatuse kogumiseks. Zombie-protsessid ei tarbi CPU-d ega mälu, kuid igaühel on oma PID. Kui neid koguneb piisavalt palju, ei saa teie süsteem luua uusi protsesse. See postitus käsitleb, kuidas neid leida, eemaldada ja vältida nende tekkimist.
Miks zombiprotsessid on serverites olulised
Üksik zombi on ohutu. Probleem algab siis, kui neid koguneb palju. Linuxil on piiratud PID-ruum: 32-bitistes süsteemides 32 768, 64-bitistes kuni 4 194 304. Kui zombiprotsessid täidavad protsessitabeli, ei saa tuum luua uusi protsesse. See tähendab, et ei teki uusi ühendusi, uusi tööniite ega midagi uut.
Veebiserverid nagu Apache ja Nginx on eriti haavatavad, kuna nad loovad liikluse käitlemiseks alamprotsesse. Võrdlustestid on näidanud, et kui zombid kogunevad hõivatud veebiserverisse, langeb läbilaskevõime 48%. 2019. aastal tekitas Golangi kanali lekkimine Kubernetesi DNS-podis ühele sõlme üle 26 000 zombi, täites protsessitabeli ja põhjustades DNS-lahenduse kokkujooksmise kogu klastris.
Allolev tabel näitab peamisi erinevusi tavalise protsessi ja zombi vahel:
| Omadus | Tavaline protsess | Zombie-protsess |
|---|---|---|
| Seisundi sümbol | R, S, D või T | Z (töötamatu) |
| CPU / Mälu | Aktiivne kasutamine | 0% / 0 (juba lõpetatud) |
| Protsessitabeli kanne | Üks pesa | Üks pesa |
Vastus kill -9 | Lõpetatakse kohe | Ei mõjuta (juba surnud) |
| Tuumamälu | Täielik protsessi deskriptor | Ainult minimaalne väljumisstaatus |
Oluline järeldus: sa ei saa kill -9 zombit. See on juba surnud. Ainus viis selle tühistamiseks on lasta vanemprotsessil see koristada või tappa vanemprotsess, nii et init (PID 1) päriks ja koristaks selle automaatselt.
Kuidas leida zombiprotsesse
Zombid kuvatakse Z-tähega veerus STAT ja <defunct> käskude nimede kõrval. Loetlege need järgmiselt:
ps aux | grep -w ZEt näha vanemprotsessi ID-d (PPID), mida vajate eemaldamiseks:
ps -eo pid,ppid,stat,comm | grep -w ZKäsk top Käsk näitab pealkirjas ka zombide koguarvu. Kiireks mitteinteraktiivseks kontrolliks:
top -bn1 | grep zombieVanemprotsessi jälgimine pstree abil
Kui teil on zombi PID, jälgige seda tagasi vastutava vanemprotsessini:
pstree -p -s <zombie_pid>See näitab täielikku päritolu init kuni zombini. Kui pstree ei ole installitud, ps auxf annab sarnase ASCII-puuvõrguvaate.
Zombide loendamine seireks
Puhas loend, mis välistab grep-protsessi enda:
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Järjepidevaks seireks veaotsingu ajal:
watch -n 1 'ps aux | grep -w Z | wc -l'Kuidas eemaldada zombiprotsesse
Zombisid saab eemaldada ainult nende väljumisstaatuse kogumise teel. See tähendab, et tuleb töötada läbi vanemprotsessi.
1. Leia vanemprotsess.
ps -o ppid= -p <zombie_pid>2. Anna vanemprotsessile märku, et see koristaks oma lapsed.
kill -SIGCHLD <parent_pid>See käsib vanemprotsessil kutsuda wait() kõikide lõpetatud tütarprotsesside puhul. See ei häiri tööd ja toimib korralikult käituvate rakenduste puhul.
3. Kui SIGCHLD ei tööta, taaskäivita teenus.
systemctl restart <service_name>4. Kui vanemprotsess ei vasta, lõpeta see.
kill <parent_pid>Või kui ta eirab SIGTERM-i:
kill -9 <parent_pid>Kui vanemprotsess sureb, init (PID 1) või systemd võta omaks orvuks jäänud zombid ja korista need kohe ära. Ole tootmissüsteemides ettevaatlik. Vanema protsessi lõpetamine lõpetab ka kõik selle aktiivsed lapsed.
5. Kontrolli puhastamist.
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Kui loend on 0, on kõik korras.
Zombie-protsesside vältimine
Käsitle oma koodis alamprotsesse
Enamiku zombiprotsesside tekke põhjuseks on vanemprotsess, mis ei kutsu kunagi wait(). Parandage seda allikas:
- C: Määrake
signal(SIGCHLD, SIG_IGN);nii, et see viskaks alamprotsessi lõpetamisinfo automaatselt ära, või kasuta signaali käitlejat kooswaitpid(-1, NULL, WNOHANG)asünkroonseks koristamiseks. - Python: Kasutage
subprocess.run(), mis ootab automaatselt. Kui kasutadPopen, kutsuproc.wait()selgesõnaliselt. - Bash: Lisa
waittaustatöid käivitavate skriptide lõppu.
Konfigureerige systemd õigesti
Systemd poolt hallatavate teenuste puhul takistavad need seaded zombide kogunemist:
KillMode=control-grouptagab, et kõik alamprotsessid lõpetatakse üheaegselt, kui teenus peatub.TimeoutStopSecannab vanemprotsessile aega tütarprotsesse koristada enne, kui systemd saadab SIGKILL-i.WatchdogSectaaskäivitab automaatselt reageerimatuid teenuseid, tabades juhtumeid, kus vanemprotsess hangub ja lõpetab koristamise.
Jälgige oma protsessitabelit
Seadistage cron-ülesanne, mis käivitub iga 15 minuti järel, et loendada zombisid ja anda teada, kui nende arv ületab künnise:
ps aux | awk '$8 ~ /Z/' | wc -lJälgige ka protsessitabeli kasutust, võrreldes praegust arvu /proc/sys/kernel/pid_max. Kui see ületab 80%, uurige olukorda enne, kui sellest saab probleem. Mõned ajutised zombid tavapärase töö käigus ei ole midagi murettekitavat. Kasvav arv, mis ei lange tagasi nullini, viitab rakenduse veale, mis vajab parandamist.
Kokkuvõte
Zombie-protsessid on surnud lapsed, mida pole ära koristatud. Nad ei kasuta CPU-d ega mälu, kuid hoiavad kinni PID-e, ja täis protsessitabel takistab teie serveril midagi kasulikku tegemast.
- Leidke need
ps aux | grep -w Zja jälgige vanemprotsessi käsugapstree. - Eemaldage need, saates
SIGCHLDvanemprotsessile, teenuse taaskäivitamisega või viimase abinõuna vanemprotsessi lõpetamisega. - Vältige neid, kirjutades koodi, mis kutsub
wait(), konfigureerides systemd õigesti ja jälgides oma protsessitabelit.
Kui teie töökoormus on suur ja vajate usaldusväärset infrastruktuuri täieliku root-juurdepääsuga, annavad FDC pühendatud serverid teile täieliku kontrolli protsesside haldamise ja süsteemi konfiguratsiooni üle.

Zombiprotsessid Linuxis: Leia, eemalda, takista
Õppige, kuidas tuvastada, eemaldada ja vältida zombiprotsesse Linuxis. Käsklused, koodiparandused ja seire näpunäited serverite administraatoritele.
15 min lugemine - 19. mai 2026
Linuxi serveri karastamise kontrollnimekiri
15 min lugemine - 8. mai 2026

Kas teil on küsimusi või vajate kohandatud lahendust?
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt