Heim > Artikel > Betrieb und Instandhaltung > Was sind übergeordnete und untergeordnete Prozesse?
Im Computerbereich bezieht sich ein übergeordneter Prozess (Englisch: Parent Process) auf einen Prozess, der einen oder mehrere untergeordnete Prozesse erstellt hat.
In UNIX, außer Prozess 0 (d. h. PID =0 Swap-Prozess, alle Prozesse außer Swapper Process) werden von anderen Prozessen mithilfe des Systemaufrufs fork erstellt. Der Prozess, der fork aufruft, um hier einen neuen Prozess zu erstellen, ist der übergeordnete Prozess und der entsprechende erstellte Prozess ist ein untergeordneter Prozess, sodass andere Prozesse als Prozess 0 nur einen übergeordneten Prozess haben, ein Prozess jedoch mehrere untergeordnete Prozesse haben kann.
Der Betriebssystemkernel identifiziert einen Prozess mit einer Prozesskennung (Prozesskennung, also PID). Prozess 0 ist ein spezieller Prozess, der beim Systemstart erstellt wird. Nachdem er fork aufgerufen hat, um einen untergeordneten Prozess zu erstellen (d. h. Prozess 1 mit PID=1, auch Init genannt), wird Prozess 0 zu einem Swap-Prozess (manchmal auch genannt). Leerlaufprozess) und Prozess 1 (Init-Prozess) ist der Vorfahre aller anderen Prozesse im System.
Wenn die Ausführung eines untergeordneten Prozesses endet (normalerweise durch Aufruf von exit), tritt während der Laufzeit ein schwerwiegender Fehler auf. oder Wenn ein Beendigungssignal empfangen wird, wird der Exit-Status (Rückgabewert) des untergeordneten Prozesses an das Betriebssystem gemeldet und das System verwendet das SIGCHLD-Signal, um den übergeordneten Prozess über die Beendigung des untergeordneten Prozesses zu informieren Diesmal befindet sich der Prozesskontrollblock (PCB) des untergeordneten Prozesses noch im Speicher. Im Allgemeinen verwendet der übergeordnete Prozess nach dem Empfang von SIGCHLD den Wartesystemaufruf, um den Exit-Status des untergeordneten Prozesses abzurufen. Anschließend kann der Kernel die PCB des beendeten untergeordneten Prozesses aus dem Speicher freigeben , wird der untergeordnete Prozess Die Leiterplatte des Prozesses bleibt immer im Speicher, was bedeutet, dass er zu einem Zombie-Prozess wird.
Ein verwaister Prozess bezieht sich auf einen untergeordneten Prozess, der nach dem Ende des übergeordneten Prozesses noch ausgeführt wird. In UNIX-ähnlichen Systemen werden verwaiste Prozesse im Allgemeinen vom Init-Prozess „übernommen“ und zu untergeordneten Prozessen von Init.
Um Zombie-Prozesse zu vermeiden, wird in praktischen Anwendungen im Allgemeinen der folgende Ansatz angewendet:
Setzen Sie die SIGCHLD-Signalverarbeitungsfunktion im übergeordneten Prozess auf SIG_IGN (ignorieren Sie das Signal). ) ;
zweimal forken und den untergeordneten Prozess der ersten Ebene beenden, wodurch der untergeordnete Prozess der zweiten Ebene zu einem verwaisten Prozess wird und von init „übernommen“ und bereinigt wird.
Im Linux-Kernel gibt es einen sehr kleinen Unterschied zwischen einem Prozess und einem POSIX-Thread sowie der Definition eines übergeordneten Threads Der Prozess unterscheidet sich auch von dem von UNIX. Linux verfügt über zwei Arten von übergeordneten Prozessen, nämlich (formelle) übergeordnete Prozesse und tatsächliche übergeordnete Prozesse. Bei einem untergeordneten Prozess ist sein übergeordneter Prozess der Prozess, der das SIGCHLD-Signal empfängt, wenn der untergeordnete Prozess endet, und der eigentliche übergeordnete Prozess ist der Prozess, der das SIGCHLD-Signal empfängt empfängt das SIGCHLD-Signal, wenn der untergeordnete Prozess endet. Der Prozess, der den untergeordneten Prozess tatsächlich in der Thread-Umgebung erstellt. Bei einem normalen Prozess sind der übergeordnete Prozess und der tatsächliche übergeordnete Prozess derselbe Prozess. Bei einem POSIX-Thread, der in Form eines Prozesses vorliegt, können der übergeordnete Prozess und der tatsächliche übergeordnete Prozess jedoch unterschiedlich sein.
Im Computerbereich wird ein untergeordneter Prozess durch einen anderen Prozess (entsprechend als übergeordneter Prozess bezeichnet) erstellt Verfahren. Der untergeordnete Prozess erbt die meisten Attribute des übergeordneten Prozesses, beispielsweise Dateideskriptoren.
Unter Unix sind untergeordnete Prozesse normalerweise das Produkt eines Systemaufrufs fork
. In diesem Fall ist der untergeordnete Prozess zu Beginn eine Kopie des übergeordneten Prozesses, und danach kann der untergeordnete Prozess entsprechend den spezifischen Anforderungen den exec-Aufruf an Kette laden Sie ein weiteres A-Programm.
Linux-Startprozess). Andere Prozesse, die keinen übergeordneten Prozess haben, können ausgeführt werden, um verschiedene Hintergrundaufgaben im Benutzerbereich auszuführen.
Wenn ein untergeordneter Prozess endet, unterbrochen wird oder die Ausführung fortsetzt, sendet der Kernel das SIGCHLD-Signal an seinen übergeordneten Prozess. Standardmäßig ignoriert der übergeordnete Prozess dies mit der Funktion SIG_IGN. aufruft, behält der Kernel weiterhin den Exit-Status und andere Informationen des untergeordneten Prozesses bei, sodass der übergeordnete Prozess wait
erhalten Sie es. Und weil in diesem Fall der untergeordnete Prozess zwar beendet wurde, aber immer noch Systemressourcen verbraucht, wird er auch als Zombie-Prozess bezeichnet. wait
wait wird häufig in der SIGCHLD-Signalverarbeitungsfunktion aufgerufen.
Im POSIX.1-2001-Standard kann der übergeordnete Prozess die SIGCHLD-Verarbeitungsfunktion auf SIG_IGN (ebenfalls die Standardeinstellung) oder auf SIGCHLD setzen SA_NOCLDWAIT-Flag, damit der Kernel automatisch die Ressourcen beendeter untergeordneter Prozesse zurückgewinnen kann. Seit Linux 2.6 und FreeBSD 5.0 unterstützen beide Kernel diese beiden Methoden. Wenn es jedoch darum geht, das SIGCHLD-Signal zu ignorieren, ist der Aufruf von wait
aufgrund der seit langem bestehenden Unterschiede zwischen System V und BSD immer noch die bequemste Möglichkeit, die Ressourcen des abgeleiteten untergeordneten Prozesses wiederzuverwenden.
Das obige ist der detaillierte Inhalt vonWas sind übergeordnete und untergeordnete Prozesse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!