2016-11-02 6 views
1

Der Zombie-Status wird für den Fall benötigt, dass der Child-Prozess beendet wurde, und im Zombie-Zustand wird der Exit-Wert gespeichert, bis der übergeordnete Prozess wait() aufruft.Ist ein Zombie-State-Prozess in Linux wirklich notwendig?

Aber warum nicht diesen Exit-Wert im Parent-Prozessdeskriptor speichern, wenn das Kind beendet und sofort die Ressourcen des Kindes vollständig freigeben?

Sagen wir zum Beispiel fügen wir dem Prozessdeskriptor einen Stapel von Exit-Werten seiner Childs hinzu.

Antwort

2

Der Schlüssel mit fork -> Warte-Modell ist nicht, dass Sie den Exit-Status (und einige andere Informationen) erhalten können, aber dass die PID des Prozesses in Betrieb bleibt, bis Sie darauf warten. Dies bedeutet, dass Sie sicher sein können, dass niemand sonst plötzlich die gleiche PID bekommt, die in bestimmten Fällen einen großen Wert hat.

Zombie selbst isst wirklich nicht viel. Alles Schwergewicht wird lange befreit und für praktische Zwecke können Sie davon ausgehen, das Kopf kocht auf die Struktur nach unten beschreibt den Prozess und den Schlitz in der pid Tabelle markiert als verwendet ..

0

Von wikipedia:

Wenn Ein Prozess endet über den Exit. Der gesamte ihm zugeordnete Speicher und die Ressourcen werden freigegeben, so dass sie von anderen -Prozessen verwendet werden können. Der Eintrag des Prozesses in der Prozesstabelle bleibt jedoch erhalten.

Es gibt also keine Ressourcenprobleme hier. Nun zu Ihrer Frage kommen,

warum nicht, dass die Exit-Wert in der übergeordneten Prozessdeskriptor Ersparnis bei das Kind verlässt

Der Grund dafür ist, dass das Kind keinen Zugang/Prozessdeskriptor der Eltern ändern. Es kann nur mit dem Elternteil kommunizieren.

Also sendet das Kind eine SIGCHLD an die Eltern, und es ist bis zu den Eltern, um das Signal zu behandeln.

Verwandte Themen