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?
multithreading
debugging
linux-development
DeveloperDon
quelle
quelle
Antworten:
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.
Nein, sie sind bereits tot.
Das Betriebssystem wird bereinigt, wenn das übergeordnete Betriebssystem stirbt oder den Statuscode vom Betriebssystem erhält.
Nein, der Elternteil kann aber nicht die Schale.
quelle
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.
quelle
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.
quelle
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
quelle