Zombie-Prozesse in Linux: Finden, Entfernen, Verhindern
15 Min. Lesezeit - 19. Mai 2026

Lernen Sie, wie Sie Zombie-Prozesse in Linux identifizieren, entfernen und verhindern können. Befehle, Codekorrekturen und Überwachungstipps für Serveradministratoren.
Zombie-Prozesse unter Linux: So finden und entfernen Sie sie
Ein Zombie-Prozess ist ein untergeordneter Prozess, der seine Ausführung beendet hat, aber weiterhin einen Platz in der Prozesstabelle des Kernels belegt. Er existiert, weil der übergeordnete Prozess nicht wait() , um seinen Exit-Status abzurufen. Zombies verbrauchen weder CPU-Leistung noch Arbeitsspeicher, aber jeder von ihnen belegt eine PID. Sammeln sich genug davon an, kann Ihr System keine neuen Prozesse mehr starten. Dieser Beitrag behandelt, wie man sie erkennt, entfernt und von vornherein verhindert, dass sie überhaupt erst entstehen.
Warum Zombie-Prozesse auf Servern eine Rolle spielen
Ein einzelner Zombie ist harmlos. Das Problem beginnt, wenn sie sich ansammeln. Linux verfügt über einen begrenzten PID-Raum: 32.768 auf 32-Bit-Systemen, bis zu 4.194.304 auf 64-Bit-Systemen. Wenn Zombie-Prozesse die Prozesstabelle füllen, kann der Kernel keine neuen Prozesse erstellen. Das bedeutet: keine neuen Verbindungen, keine neuen Worker-Threads, nichts Neues.
Webserver wie Apache und Nginx sind besonders gefährdet, da sie Child-Prozesse forken, um den Datenverkehr zu bewältigen. Benchmarks haben einen Durchsatzrückgang von 48 % gezeigt, wenn sich Zombies auf einem stark ausgelasteten Webserver ansammeln. Im Jahr 2019 verursachte ein Golang-Channel-Leak in einem Kubernetes-DNS-Pod über 26.000 Zombies auf einem einzelnen Knoten, füllte die Prozesstabelle und führte zu einem clusterweiten Absturz der DNS-Auflösung.
Die folgende Tabelle zeigt die wichtigsten Unterschiede zwischen einem normalen Prozess und einem Zombie:
| Merkmal | Normaler Prozess | Zombie-Prozess |
|---|---|---|
| Zustandssymbol | R, S, D oder T | Z (inaktiv) |
| CPU / Speicher | Aktive Nutzung | 0 % / 0 (bereits beendet) |
| Eintrag in der Prozesstabelle | Ein Steckplatz | Ein Slot |
Reaktion auf kill -9 | Wird sofort beendet | Keine Auswirkung (bereits beendet) |
| Kernel-Speicher | Vollständiger Prozessdeskriptor | Nur minimaler Exit-Status |
Die entscheidende Erkenntnis: Man kann kill -9 einen Zombie. Er ist bereits tot. Die einzige Möglichkeit, ihn zu beseitigen, besteht darin, den Elternprozess ihn abräumen zu lassen oder den Elternprozess zu beenden, damit init (PID 1) ihn automatisch erbt und bereinigt.
So finden Sie Zombie-Prozesse
Zombies werden mit einem Z in der Spalte STAT und <defunct> neben dem Befehlsnamen. Listen Sie sie mit folgendem Befehl auf:
ps aux | grep -w ZUm die ID des übergeordneten Prozesses (PPID) anzuzeigen, die Sie zum Entfernen benötigen:
ps -eo pid,ppid,stat,comm | grep -w ZDer top Befehl gibt in seiner Kopfzeile auch die Gesamtzahl der Zombies an. Für eine schnelle, nicht-interaktive Überprüfung:
top -bn1 | grep zombieDen Elternprozess mit pstree aufspüren
Sobald Sie die PID eines Zombies haben, verfolgen Sie diese zurück zum verantwortlichen Elternprozess:
pstree -p -s <zombie_pid>Dies zeigt die vollständige Abstammungslinie init bis hinunter zum Zombie. Falls pstree nicht installiert ist, ps auxf liefert eine ähnliche ASCII-Baumansicht.
Zombies zur Überwachung zählen
Eine bereinigte Zählung, die den grep-Prozess selbst ausschließt:
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Für die kontinuierliche Überwachung während der Fehlerbehebung:
watch -n 1 'ps aux | grep -w Z | wc -l'So entfernen Sie Zombie-Prozesse
Zombies können nur entfernt werden, indem ihr Exit-Status erfasst wird. Das bedeutet, dass man über den Elternprozess vorgehen muss.
1. Finden Sie den Elternprozess.
ps -o ppid= -p <zombie_pid>2. Geben Sie dem Elternprozess ein Signal, seine Kinder zu beenden.
kill -SIGCHLD <parent_pid>Dadurch wird der Elternprozess angewiesen, wait() für alle beendeten Kinder aufzurufen. Dies ist unterbrechungsfrei und funktioniert bei gut funktionierenden Anwendungen.
3. Wenn SIGCHLD nicht funktioniert, starte den Dienst neu.
systemctl restart <service_name>4. Wenn der Elternprozess nicht reagiert, beende ihn.
kill <parent_pid>Oder wenn er SIGTERM ignoriert:
kill -9 <parent_pid>Wenn der Elternprozess stirbt, init (PID 1) oder systemd die verwaisten Zombies und räumt sie sofort auf. Seien Sie bei Produktionssystemen vorsichtig. Das Beenden des Elternprozesses beendet auch alle seine aktiven Kinderprozesse.
5. Überprüfe die Bereinigung.
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Wenn der Zählerstand 0 ist, ist alles in Ordnung.
Zombie-Prozesse verhindern
Behandeln Sie untergeordnete Prozesse in Ihrem Code
Die Hauptursache für die meisten Zombie-Ansammlungen ist ein Elternprozess, der niemals wait(). Beheben Sie das Problem an der Quelle:
- C: Setzen Sie
signal(SIGCHLD, SIG_IGN);so ein, dass Informationen zum Beenden von Kindprozessen automatisch verworfen werden, oder verwenden Sie einen Signal-Handler mitwaitpid(-1, NULL, WNOHANG), um asynchron zu bereinigen. - Python: Verwenden Sie
subprocess.run(), das automatisch wartet. Bei Verwendung vonPopen, rufen Sieproc.wait()explizit auf. - Bash: Fügen Sie
waitam Ende von Skripten, die Hintergrundaufträge starten.
Konfigurieren Sie systemd ordnungsgemäß
Bei von systemd verwalteten Diensten verhindern diese Einstellungen die Bildung von Zombie-Prozessen:
KillMode=control-groupstellt sicher, dass alle untergeordneten Prozesse gemeinsam beendet werden, wenn der Dienst stoppt.TimeoutStopSecgibt dem Elternprozess Zeit, die Kindprozesse zu bereinigen, bevor systemd ein SIGKILL sendet.WatchdogSecstartet nicht reagierende Dienste automatisch neu und fängt Fälle ab, in denen der Elternprozess hängt und das Aufräumen einstellt.
Überwachen Sie Ihre Prozesstabelle
Richten Sie einen Cron-Job ein, der alle 15 Minuten ausgeführt wird, um Zombies zu zählen und eine Warnung auszugeben, wenn die Anzahl einen Schwellenwert überschreitet:
ps aux | awk '$8 ~ /Z/' | wc -lÜberwachen Sie außerdem die Auslastung Ihrer Prozesstabelle, indem Sie die aktuelle Anzahl mit /proc/sys/kernel/pid_max. Wenn sie 80 % überschreitet, sollten Sie der Sache nachgehen, bevor es zu einem Problem wird. Ein paar vorübergehende Zombies während des normalen Betriebs sind kein Grund zur Sorge. Eine steigende Anzahl, die nicht wieder auf Null zurückfällt, deutet auf einen Anwendungsfehler hin, der behoben werden muss.
Fazit
Zombie-Prozesse sind tote Prozesse, die nicht bereinigt wurden. Sie beanspruchen zwar keine CPU-Leistung oder Speicher, belegen jedoch PIDs, und eine volle Prozesstabelle hindert Ihren Server daran, irgendetwas Sinnvolles zu tun.
- Finden Sie sie mit
ps aux | grep -w Zund verfolgen Sie den Elternprozess mitpstree. - Entfernen Sie sie, indem Sie
SIGCHLDan den Elternprozess, durch einen Neustart des Dienstes oder als letzten Ausweg durch das Beenden des Elternprozesses. - Verhindern Sie sie, indem Sie Code schreiben, der
wait(), systemd korrekt konfiguriert und Ihre Prozesstabelle überwacht.
Wenn Sie Workloads mit hohem Datenverkehr ausführen und eine zuverlässige Infrastruktur mit vollständigem Root-Zugriff benötigen, bieten Ihnen die dedizierten Server von FDC die volle Kontrolle über Ihr Prozessmanagement und Ihre Systemkonfiguration.

Zombie-Prozesse in Linux: Finden, Entfernen, Verhindern
Lernen Sie, wie Sie Zombie-Prozesse in Linux identifizieren, entfernen und verhindern können. Befehle, Codekorrekturen und Überwachungstipps für Serveradministratoren.
15 Min. Lesezeit - 19. Mai 2026
Checkliste für die Härtung von Linux-Servern
15 Min. Lesezeit - 8. Mai 2026

Haben Sie Fragen oder benötigen Sie eine individuelle Lösung?
Flexible Optionen
Globale Reichweite
Sofortige Bereitstellung
Flexible Optionen
Globale Reichweite
Sofortige Bereitstellung