Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Was sind übergeordnete und untergeordnete Prozesse?

Was sind übergeordnete und untergeordnete Prozesse?

PHP中文网
PHP中文网Original
2017-06-22 15:41:218388Durchsuche

Übergeordneter Prozess

Im Computerbereich bezieht sich ein übergeordneter Prozess (Englisch: Parent Process) auf einen Prozess, der einen oder mehrere untergeordnete Prozesse erstellt hat.

UNIX


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.

Zombie-Prozesse und verwaiste Prozesse


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:

  1. Setzen Sie die SIGCHLD-Signalverarbeitungsfunktion im übergeordneten Prozess auf SIG_IGN (ignorieren Sie das Signal). ) ;

  2. 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.

Linux

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.

Untergeordneter Prozess


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.

erzeugt


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.

Beziehung zum übergeordneten Prozess


Ein Prozess kann mehrere untergeordnete Prozesse haben, es kann jedoch höchstens einen geben Übergeordneter Prozess. Wenn ein Prozess keinen übergeordneten Prozess hat, ist ersichtlich, dass der Prozess wahrscheinlich direkt vom Kernel generiert wird. In Unix und Unix-ähnlichen Systemen wird der Prozess mit der Prozess-ID 1 (d. h. Init-Prozess) direkt vom Kernel während der Systemstartphase erstellt und beendet die Ausführung nicht, während das System läuft (siehe

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.

„Verwaister Prozess“ und „Zombie-Prozess“


Nachdem der entsprechende übergeordnete Prozess die Ausführung beendet hat, wird der Prozess zu einem verwaisten Prozess, dies wird jedoch sofort der Fall sein vom Init-Prozess als Kindprozess „übernommen“.

Nachdem ein untergeordneter Prozess die Ausführung beendet hat und sein übergeordneter Prozess nicht vorher

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. waitwait wird häufig in der SIGCHLD-Signalverarbeitungsfunktion aufgerufen.

Lösung und Prävention

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn