Zombie-Prozess vs Orphan-Prozess
Einen Zombie erzeugt wird, wenn ein übergeordneter Prozess, der nicht das warten, das call-system nach stirbt ein Kind zu Lesen, dessen exit-status, und eine Waise Kind-Prozess, der zurückgefordert, die von init, wenn die ursprüngliche übergeordnete Prozess beendet ist, bevor das Kind.
In Bezug auf Speicher-management und die Prozess-Tabelle wie werden diese Prozesse unterschiedlich gehandhabt, speziell in UNIX?
Was ist ein Beispiel, oder extremen Fall, wenn die Schaffung von zombies oder Waisen können sich nachteilig auf die verstärkte Anwendung oder system?
InformationsquelleAutor der Frage MarkAWard | 2013-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ein Kind beendet, einige Prozess muss
wait
auf es zu bekommen Ihre exit-code. Dass exit-code ist gespeichert in der Prozess-Tabelle, bis das geschieht. Der Akt des Lesens, der exit-code wird als "ernten" auf das Kind. Zwischen der Zeit, ein Kind beendet und erntete, spricht man von einem zombie. (Die ganze Nomenklatur ist ein bisschen grausig, wenn man darüber nachdenkt; ich empfehle, nicht darüber nachzudenken, es zu viel.)Zombies nur belegen Speicherplatz in der Prozess-Tabelle. Sie nehmen keine Speicher-oder CPU. Jedoch, der Prozess-Tabelle ist eine endliche Ressource, und übermäßige zombies füllen kann, was bedeutet, dass keine anderen Prozesse starten können. Darüber hinaus sind Sie lästigen Kabelsalat, und sollte dringend vermieden.
Wenn ein Prozess beendet wird, kann mit Kindern noch läuft (und nicht töten seine Kinder; die Metapher weiter zu Bizarr), diese Kinder sind Waisen. Verwaiste Kinder sind sofort "adoptiert", indem Sie
init
(tatsächlich, ich denke, die meisten Leute bezeichnen dies als "übernahme", sondern um "adoption" zu tragen scheint die Metapher besser). Ein Waisenkind ist nur ein Prozess. Es wird verwenden, was Ressourcen, die Sie verwendet. Es ist vernünftig, zu sagen, dass es nicht eine "orphan" an, da es ein Elternteil hat, aber ich habe gehört, wie Sie genannt wird, oft.init
automatisch erntet, deren Kinder (Adoptiv-oder anderweitig). Also, wenn Sie verlassen, ohne Reinigung Ihre Kinder, dann werden Sie nicht zu zombies (zumindest nicht für mehr als einen Augenblick).Aber lange gelebt zombies existieren. Was sind Sie? Sie sind die einstigen Kinder ein bestehender Prozess, der nicht geerntet. Der Prozess aufgehängt werden kann. Oder ist es vielleicht schlecht geschrieben und vergisst zu ernten Ihre Kinder. Oder vielleicht ist es überlastet und noch nicht bekommen. Oder was auch immer. Aber für einige Grund, der übergeordnete Prozess weiter zu existieren (Sie sind also nicht-Waisen), und Sie haben nicht erst gewartet, also Leben Sie als zombies in der Prozess-Tabelle.
Also, wenn Sie sehen, zombies für mehr als einen Augenblick, dann bedeutet es, dass es etwas falsch mit der parent-Prozess, und etwas getan werden sollte, um zu verbessern das Programm.
InformationsquelleAutor der Antwort Rob Napier
Wenn ein Prozess beendet und seine Ressourcen werden freigegeben, durch das Betriebssystem
system. Jedoch, seinen Eintrag in der Prozesstabelle muss dort verbleiben, bis die
Elternteil ruft wait () auf, weil die Prozess-Tabelle enthält, die den Prozess der exit-status.
Ein Prozess, der beendet wurde, aber deren Eltern noch nicht aufgerufen wait(),
bekannt als zombie-Prozess. Alle Prozesse, die den übergang zu diesem Zustand, wenn Sie
kündigen, aber in der Regel existieren Sie als zombies nur kurz. Sobald die Eltern
Aufrufe von wait () die Prozess-id des zombie-Prozess und dessen Eintragung in das
Prozess-Tabelle veröffentlicht werden.
Nun überlegen, was passieren würde, wenn ein Elternteil nicht aufrufen von wait() und
stattdessen beendet, sodass seine Kind-Prozesse als Waisen. Linux und
UNIX-Adresse in diesem Szenario durch die Zuordnung der init-Prozess, da die neue Eltern-verwaiste Prozesse. Der init-Prozess in regelmäßigen Abständen
ruft wait () auf, damit der exit-status der verwaiste Prozess
gesammelt und loslassen der verwaiste Prozess-id und Prozess-Tabelleneintrag.
Quelle: Betriebssystem-Konzepte von Abraham, Peter, Greg
InformationsquelleAutor der Antwort opticod
Einer orphan-Prozess ist ein computer-Prozess, dessen
parent process
beendet ist oder beendet wird, obwohl es (Kind-Prozess) laufen bleibt, selbst.Ein zombie-Prozess oder nicht mehr existierenden Prozess ist ein Prozess, der die Ausführung abgeschlossen hat aber immer noch einen Eintrag in der Prozesstabelle wie der übergeordnete Prozess nicht aufrufen
wait()
system nennen.InformationsquelleAutor der Antwort Linkon
Gibt es keine Waisen, sondern den Prozess mit PID 1.
Aus den Laufenden Prozess-Sicht macht es keinen Unterschied, ob es direkt gestartet und daher hat die PID 1, als Eltern oder haben geerbt von PID 1, weil dessen original-Elternprozess (Verschieden von PID 1) endete.
Es wird behandelt wie jeder andere Prozess.
Jeder Prozess durchläuft eine Art zombie-Zustand, wenn die Endung, nämlich die phase zwischen der Ankündigung zu seinem Ende durch die Herausgabe
SIGCHLD
und dessen Abwicklung (Lieferung oder Unwissenheit) anerkannt.Wenn die zombie-Zustand eingetragen worden, der Prozess ist nur ein Eintrag in die system - Prozessliste.
Die einzige nennenswerte Ressource ein zombie ist ausschließlich mit einer gültigen PID.
InformationsquelleAutor der Antwort alk