Was ist ein Zombie-Prozess oder Thread?

11

Was ist ein Zombie-Prozess oder Thread und was erzeugt sie? Töte ich sie nur oder kann ich etwas tun, um eine Diagnose darüber zu erhalten, wie sie gestorben sind?

DeveloperDon
quelle
13
Sie schneiden ihren Kopf. Oder du verbrennst sie. Das ist der einzige Weg.
Simon Bergot
"Schlage sie oder verbrenne sie, sie steigen ziemlich leicht auf" ...
TMN

Antworten:

17

Was ist ein Zombie-Prozess oder Thread und was erzeugt sie?

Ein Zombie-Prozess ist ein toter Prozess.
Das Betriebssystem speichert nur Informationen, damit die Eltern den Exit-Code der Prozesse zu einem späteren Zeitpunkt überprüfen können, da das Betriebssystem Informationen über sie speichert und sie daher beim Betrachten von Prozessen auftauchen.

Töte ich sie einfach,

Nein, sie sind bereits tot.
Das Betriebssystem wird bereinigt, wenn das übergeordnete Betriebssystem stirbt oder den Statuscode vom Betriebssystem erhält.

oder kann ich etwas tun, um eine Diagnose darüber zu erhalten, wie sie gestorben sind?

Nein, der Elternteil kann aber nicht die Schale.

Martin York
quelle
4

Ein Zombie-Thread ist ein Thread, der seine Ausführung beendet hat, aber nicht sauber beendet wurde. Es gibt die vom Thread verwendeten Ressourcen frei, behält jedoch einen Eintrag in der Thread- / Prozesstabelle bei.

Theoretisch verlässt der Zombiethread diesen Status durch Ausführen eines _join (POSIX). Dies bedeutet, dass der Zombie-Prozess mit dem Programm beendet wird, wenn Ihr Main fertig ist.

Yannick Müller
quelle
2

Ein Zombie-Prozess ist ein Prozess, der sowohl seine Ausführung beendet als auch aus der Liste der geplanten Prozesse entfernt, aber noch nicht gelöscht wurde. Abhängig vom Betriebssystem sind tt möglicherweise noch verschiedene Ressourcen zugewiesen oder werden nicht abgefragt, aber es wird nicht ausgeführt.

Einige Betriebssysteme (standardmäßig) dürfen keine Ressourcen über einen bestimmten Ereignispunkt hinaus dynamisch erstellen oder löschen (z. B. VxWorks Cert). Solche Systeme umgehen diese Einschränkung häufig, indem sie vorab zugewiesene Ressourcenpools verwenden, aus denen sie Elemente abrufen, zurückgeben und wiederverwenden. Wenn ein Prozess auf einem solchen System jedoch beendet wird, kann er nicht gelöscht werden und wird stattdessen zombifiziert (beendet und aus der Planungsliste entfernt).

Hoffe das hilft.

Sparky
quelle
0

Wenn der Thread / Prozess beendet wird, aber in der entsprechenden Tabelle noch ein Datensatz darüber vorhanden ist, wird er zu einem Zombie.

Dies kann beispielsweise passieren, wenn ein übergeordneter Prozess einen untergeordneten Prozess erstellt, dieser jedoch vor dem untergeordneten Prozess beendet wird. Wenn der untergeordnete Prozess beendet wird, teilt er dem übergeordneten Prozess das Beenden mit. Anschließend wird der Datensatz des untergeordneten Prozesses aus der entsprechenden Tabelle entfernt. Das übergeordnete Element wurde jedoch bereits beendet, sodass der Datensatz weiterhin in der Tabelle verbleibt.

Es gibt keine Möglichkeit, Zombies loszuwerden, sondern die neu zu starten

superM
quelle
1
Ein Neustart ist nicht erforderlich. Töte einfach den übergeordneten Prozess und die Zombies werden vom System automatisch bereinigt.
Kevin Panko