Zombieprocessen in Linux: Vinden, Verwijderen, Voorkomen

15 min lezen - 19 mei 2026

hero section cover
Inhoudsopgave
  • Zombieprocessen in Linux: hoe u ze kunt vinden en verwijderen
  • Waarom zombieprocessen belangrijk zijn op servers
  • Hoe u zombieprocessen kunt vinden
  • Hoe zombieprocessen te verwijderen
  • Zombieprocessen voorkomen
  • Conclusie
Delen

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:

KenmerkNormaal procesZombieproces
Status symboolR, S, D of TZ (niet meer in gebruik)
CPU / GeheugenActief gebruik0% / 0 (reeds beëindigd)
Invoer in de procestabelEén slotEén slot
Reactie op kill -9Wordt onmiddellijk beëindigdGeen effect (al dood)
KernelgeheugenVolledige procesdescriptorAlleen 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 Z

Om de parent process ID (PPID) te zien, die je nodig hebt voor het verwijderen:

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

Het top commando geeft ook het totale aantal zombies weer in de kopregel. Voor een snelle, niet-interactieve controle:

top -bn1 | grep zombie

Het 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 met waitpid(-1, NULL, WNOHANG) om asynchroon op te ruimen.
  • Python: Gebruik subprocess.run(), dat automatisch wacht. Als je Popen, roep proc.wait() expliciet aan.
  • Bash: Voeg wait aan 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-group zorgt ervoor dat alle onderliggende processen samen worden beëindigd wanneer de service stopt.
  • TimeoutStopSec geeft het bovenliggende proces de tijd om onderliggende processen op te ruimen voordat systemd SIGKILL verstuurt.
  • WatchdogSec start 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 -l

Controleer 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 Z en traceer het bovenliggende proces met pstree.
  • Verwijder ze door SIGCHLD naar 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.

Blog

Uitgelicht deze week

Meer artikelen
Zombieprocessen in Linux: Vinden, Verwijderen, Voorkomen

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

Meer artikelen
background image

Hebt u vragen of wilt u een oplossing op maat?

icon

Flexibele opties

icon

Wereldwijd bereik

icon

Directe inzet

icon

Flexibele opties

icon

Wereldwijd bereik

icon

Directe inzet