Der Unterschied zwischen fork und exec unter Linux: 1. Fork wird verwendet, um einen neuen Prozess, einen sogenannten untergeordneten Prozess, zu erstellen, während exec den gesamten Inhalt des aktuellen Prozesses durch ein bestimmtes Programm ersetzt; 2. Die Prozess-IDs davor und danach exec ändert sich nicht und die ID hat sich geändert, nachdem Fork den untergeordneten Prozess neu erstellt hat.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
fork und exec sind beide prozessbezogene Aufrufe.
fork
Der Aufruf von fork kann einen neuen Prozess erstellen, der als untergeordneter Prozess bezeichnet wird, und den Prozess, der den Fork aufruft Die Funktion heißt Alles über den übergeordneten Prozess und den untergeordneten Prozess ist mit dem übergeordneten Prozess identisch, mit Ausnahme des PCD (Prozesssteuerungsmoduls). Wenn keiner der Prozesse in den Speicher schreibt, teilen sich die beiden Prozesse die Speicherseite des Prozesses Oberflächlich betrachtet scheint der von fork erstellte Prozess schneller zu sein als der von exec erstellte Prozess. Solange jedoch einer der beiden Prozesse den Speicher ändert, wird die Speicherseite zuvor in den untergeordneten Prozess kopiert Die Änderung.
exec
Der Aufruf von exec zum Erstellen eines Prozesses bedeutet nicht, dass ein Prozess erstellt wird. Genauer gesagt wird eine ausführbare Datei geladen. Nach dem Aufruf von exec wird die in exec angegebene ausführbare Datei geladen Der Speicherplatz des Prozesses, der exec aufruft, wird mit dem Inhalt der in exec angegebenen ausführbaren Datei geladen. Der Unterschied besteht darin, dass fork hauptsächlich für die Erstellung neuer Prozesse (Threads) entwickelt wurde. während die exec()-Funktionsreihe verwendet wird, um anzugeben, dass das Programm den gesamten Inhalt des aktuellen Prozesses ersetzt. Daher wird die Funktionsreihe exec() häufig aufgerufen, nachdem die ersten drei Funktionen verwendet wurden, um eine neue Programmlaufumgebung zu erstellen. Der Prozess, bei dem Linux den Init-Prozess zum Starten anderer Prozesse verwendet, läuft normalerweise wie folgt ab:
fork ist der einfachste Aufruf und erfordert keine Parameter. Er erstellt lediglich einen untergeordneten Prozess und einen vom übergeordneten Prozess unabhängigen Bereich. Nachdem wir die Fork-Funktion zum Erstellen eines neuen Prozesses verwendet haben, rufen wir häufig die Exec-Funktion im neuen Prozess auf, um ein anderes Programm auszuführen (wenn wir beispielsweise ein Programm schreiben, müssen wir die Funktion eines von uns geschriebenen Programms verwenden). Auf diese Weise können wir unser Programm direkt aufrufen. Wenn ein Prozess die Exec-Funktion aufruft, wird der Prozess vollständig durch ein neues Programm ersetzt. Da durch den Aufruf der exec-Funktion kein neuer Prozess erstellt wird, haben sich die IDs der vorhergehenden und nachfolgenden Prozesse nicht geändert.
Der übergeordnete Prozess generiert über fork () einen identischen untergeordneten Prozess, um den tatsächlich auszuführenden Prozess auszuführen, und wird schließlich zu einem untergeordneten Prozess, der bestimmte spezifische Funktionen ausführen kann.
Sobald ein Prozess die Exec-Klassenfunktion aufruft, „stirbt“ er selbst. Das System ersetzt das Codesegment durch den Code des neuen Programms, verwirft das ursprüngliche Datensegment und das Stack-Segment und weist dem neue Datensegmente und Stack-Segmente zu Das einzige, was im Stapelsegment übrig bleibt, ist die Prozessnummer. Mit anderen Worten: Für das System ist es immer noch derselbe Prozess, aber es ist bereits ein anderes Programm. Das heißt, nach dem Aufruf der Exec-Familienfunktion werden die nachfolgenden Programme nicht ausgeführt.
Empfohlenes Lernen:
Linux-Video-TutorialDas obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Fork und Exec unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!