Sobes.tech
Middle

Welchen Status muss ein Prozess vom Elternprozess erhalten, um ein Zombie zu werden?

sobes.tech KI

Antwort von AI

Der Prozess wird zu einem Zombie oder "Geisterprozess", wenn er seine Ausführung beendet (in den Zustand EXIT_ZOMBIE wechselt), aber sein Eintrag in der Prozesstabelle noch existiert, in Erwartung, dass sein Elternprozess seinen Beendigungsstatus mit dem Systemaufruf wait() oder waitpid() liest. Bis zu diesem Zeitpunkt belegt er minimale Ressourcen (praktisch nur den Eintrag in der Prozesstabelle), gibt aber die damit verbundenen Ressourcen nicht vollständig frei.

In der Prozesstabelle wird ein solcher Prozess in der Regel mit dem Indikator <defunct> angezeigt.

# Beispielausgabe des ps-Befehls, der einen Zombie-Prozess zeigt
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
someuser  1234  0.0  0.0      0     0 pts/0    Z+   10:00   0:00 [defunct_process]
...

Damit der Zombie-Prozess verschwindet, muss der Elternprozess wait() oder waitpid() aufrufen. Wenn der Elternprozess vor dem Lesen des Status seiner Zombie-Kinder beendet, werden diese Kinder zu Kindern des Prozesses init (mit ID 1), der automatisch wait() für seine Kindprozesse aufruft und so die Zombies beseitigt.

Der Hauptstatus, den ein Prozess vom Elternprozess erhält, um ein Zombie zu werden, ist der Beendigungsstatus, den der Elternprozess noch nicht durch wait*-Aufrufe verarbeitet hat.