Zombieprocessen in Linux: Vinden, Verwijderen, Voorkomen
15 min lezen - 19 mei 2026

Leer hoe je zombieprocessen in Linux kunt identificeren, verwijderen en voorkomen. Commando's, codefixes en monitoringtips voor serverbeheerders.
Zombieprocessen in Linux: hoe u ze kunt vinden en verwijderen
Een zombieproces is een onderliggend proces dat is voltooid, maar nog steeds een plek inneemt in de procestabel van de kernel. Het bestaat omdat het bovenliggende proces geen wait() om de exitstatus op te halen. Zombies verbruiken geen CPU of geheugen, maar elk proces bezet wel een PID. Als er zich genoeg opstapelen, kan uw systeem geen nieuwe processen meer starten. Dit bericht behandelt hoe u ze kunt opsporen, verwijderen en voorkomen dat ze überhaupt verschijnen.
Waarom zombieprocessen belangrijk zijn op servers
Een enkele zombie is onschadelijk. Het probleem begint wanneer ze zich opstapelen. Linux heeft een beperkte PID-ruimte: 32.768 op 32-bits systemen, tot 4.194.304 op 64-bits systemen. Als zombieprocessen de procestabel vullen, kan de kernel geen nieuwe processen aanmaken. Dat betekent geen nieuwe verbindingen, geen nieuwe werkthreads, helemaal niets nieuws.
Webservers zoals Apache en Nginx zijn bijzonder kwetsbaar omdat ze child-processen forken om het verkeer af te handelen. Benchmarks hebben een daling van 48% in de doorvoer aangetoond wanneer zombies zich ophopen op een drukke webserver. In 2019 creëerde een Golang-channel-lek in een Kubernetes DNS-pod meer dan 26.000 zombies op één enkele node, waardoor de procestabel vol raakte en de DNS-resolutie clusterbreed crashte.
De onderstaande tabel toont de belangrijkste verschillen tussen een normaal proces en een zombie:
| Kenmerk | Normaal proces | Zombieproces |
|---|---|---|
| Status symbool | R, S, D of T | Z (niet meer in gebruik) |
| CPU / Geheugen | Actief gebruik | 0% / 0 (reeds beëindigd) |
| Invoer in de procestabel | Eén slot | Eén slot |
Reactie op kill -9 | Wordt onmiddellijk beëindigd | Geen effect (al dood) |
| Kernelgeheugen | Volledige procesdescriptor | Alleen minimale exitstatus |
De cruciale conclusie: je kunt kill -9 een zombie. Die is al dood. De enige manier om deze te wissen is door het bovenliggende proces deze te laten oogsten, of het bovenliggende proces te beëindigen zodat init (PID 1) het automatisch erft en opruimt.
Hoe u zombieprocessen kunt vinden
Zombies worden weergegeven met een Z in de kolom STAT en <defunct> naast de opdrachtnaam. Maak een lijst met:
ps aux | grep -w ZOm de parent process ID (PPID) te zien, die je nodig hebt voor het verwijderen:
ps -eo pid,ppid,stat,comm | grep -w ZHet top commando geeft ook het totale aantal zombies weer in de kopregel. Voor een snelle, niet-interactieve controle:
top -bn1 | grep zombieHet bovenliggende proces traceren met pstree
Zodra u de PID van een zombie hebt, traceert u deze terug naar het verantwoordelijke bovenliggende proces:
pstree -p -s <zombie_pid>Dit toont de volledige afstamming vanaf init tot aan de zombie. Als pstree niet is geïnstalleerd, ps auxf geeft een vergelijkbare ASCII-boomstructuurweergave.
Zombies tellen voor monitoring
Een schone telling die het grep-proces zelf uitsluit:
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Voor continue monitoring tijdens het oplossen van problemen:
watch -n 1 'ps aux | grep -w Z | wc -l'Hoe zombieprocessen te verwijderen
Zombies kunnen alleen worden verwijderd door hun exitstatus te verzamelen. Dat betekent dat je via het bovenliggende proces moet werken.
1. Zoek het bovenliggende proces.
ps -o ppid= -p <zombie_pid>2. Geef het bovenliggende proces een signaal om zijn onderliggende processen te beëindigen.
kill -SIGCHLD <parent_pid>Dit vertelt het bovenliggende proces om wait() op alle beëindigde kinderen. Dit is niet-verstorend en werkt bij goed functionerende applicaties.
3. Als SIGCHLD niet werkt, start de service dan opnieuw op.
systemctl restart <service_name>4. Als het ouderproces niet reageert, beëindig het dan.
kill <parent_pid>Of als het SIGTERM negeert:
kill -9 <parent_pid>Wanneer het bovenliggende proces sterft, init (PID 1) of systemd neem dan de verweesde zombies over en ruim ze onmiddellijk op. Wees voorzichtig op productiesystemen. Het beëindigen van het bovenliggende proces beëindigt ook al zijn actieve onderliggende processen.
5. Controleer de opschoning.
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Als de telling 0 is, zit je goed.
Zombieprocessen voorkomen
Behandel child-processen in uw code
De hoofdoorzaak van de meeste zombie-opstapels is een bovenliggend proces dat nooit wait(). Los het bij de bron op:
- C: Stel
signal(SIGCHLD, SIG_IGN);in om exit-informatie van child-processen automatisch te negeren, of gebruik een signaalhandler metwaitpid(-1, NULL, WNOHANG)om asynchroon op te ruimen. - Python: Gebruik
subprocess.run(), dat automatisch wacht. Als jePopen, roepproc.wait()expliciet aan. - Bash: Voeg
waitaan het einde van scripts die achtergrondtaken starten.
Configureer systemd correct
Voor services die door systemd worden beheerd, voorkomen deze instellingen de opbouw van zombieprocessen:
KillMode=control-groupzorgt ervoor dat alle onderliggende processen samen worden beëindigd wanneer de service stopt.TimeoutStopSecgeeft het bovenliggende proces de tijd om onderliggende processen op te ruimen voordat systemd SIGKILL verstuurt.WatchdogSecstart niet-reagerende services automatisch opnieuw op, waardoor gevallen worden opgevangen waarin het bovenliggende proces vastloopt en stopt met het opruimen.
Houd uw procestabel in de gaten
Stel een cron-taak in die elke 15 minuten wordt uitgevoerd om zombies te tellen en een waarschuwing te geven als het aantal een drempel overschrijdt:
ps aux | awk '$8 ~ /Z/' | wc -lControleer ook het gebruik van uw procestabel door het huidige aantal te vergelijken met /proc/sys/kernel/pid_max. Als het hoger is dan 80%, onderzoek dit dan voordat het een probleem wordt. Een paar tijdelijke zombies tijdens normaal gebruik zijn niets om je zorgen over te maken. Een groeiend aantal dat niet terugvalt naar nul wijst op een applicatiefout die verholpen moet worden.
Conclusie
Zombieprocessen zijn dode processen die niet zijn opgeruimd. Ze gebruiken geen CPU of geheugen, maar ze bezetten PID's, en een volle procestabel zorgt ervoor dat uw server niets nuttigs meer kan doen.
- Zoek ze met
ps aux | grep -w Zen traceer het bovenliggende proces metpstree. - Verwijder ze door
SIGCHLDnaar het bovenliggende proces, de service opnieuw te starten of, als laatste redmiddel, het bovenliggende proces te beëindigen. - Voorkom ze door code te schrijven die
wait(), configureer systemd correct en houd uw procestabel in de gaten.
Als u workloads met veel verkeer uitvoert en betrouwbare infrastructuur met volledige root-toegang nodig hebt, geven de dedicated servers van FDC u volledige controle over uw procesbeheer en systeemconfiguratie.

Zombieprocessen in Linux: Vinden, Verwijderen, Voorkomen
Leer hoe je zombieprocessen in Linux kunt identificeren, verwijderen en voorkomen. Commando's, codefixes en monitoringtips voor serverbeheerders.
15 min lezen - 19 mei 2026
Linux server hardening checklist
15 min lezen - 8 mei 2026

Hebt u vragen of wilt u een oplossing op maat?
Flexibele opties
Wereldwijd bereik
Directe inzet
Flexibele opties
Wereldwijd bereik
Directe inzet