Wenn wir einen Prozess unter Linux erstellen, gibt es drei häufig verwendete Befehle, um dieses Ziel zu erreichen: fork
, exec
und wait
. Hier finden Sie eine detaillierte Erklärung dieser drei Befehle:
1. fork-Befehl:fork
Der Befehl wird zum Erstellen eines neuen Prozesses verwendet. Der neue Prozess ist eine Kopie des aktuellen Prozesses (übergeordneter Prozess). Er erbt den Code, die Daten, die Dateideskriptoren, den Prozesskontext und andere Informationen des übergeordneten Prozesses der übergeordnete Prozess. Der neue Prozess und der übergeordnete Prozess führen fork
den dem Befehl folgenden Code gleichzeitig aus, sodass sie unterschiedliche Vorgänge in verschiedenen Zweigen ausführen können.
fork
Der Befehl hat keine Parameter und seine Syntax lautet wie folgt:
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Nach erfolgreichem Aufruf fork
des Befehls wird zweimal zurückgegeben: einmal im übergeordneten Prozess, wobei die PID (Prozess-ID) des neu erstellten untergeordneten Prozesses zurückgegeben wird, und einmal im untergeordneten Prozess, wobei 0 zurückgegeben wird. Gibt bei einem Fehler -1 zurück.
2. exec-Befehl:exec
Der Befehl wird verwendet, um ein neues Programm im aktuellen Prozess auszuführen. Wenn der Befehl aufgerufen wird exec
, werden der Code und die Daten des aktuellen Prozesses durch den Code und die Daten des neuen Programms ersetzt, Informationen wie die PID des Prozesses und der Dateideskriptor bleiben jedoch unverändert. Dies ermöglicht den Start eines neuen Programms im aktuellen Prozess, ohne einen völlig neuen Prozess zu erstellen.
exec
Es gibt mehrere Varianten des Befehls, z. B. , , execl
usw. execv
, die je nach Bedarf Informationen wie Befehlszeilenparameter und Umgebungsvariablen übergeben können.execle
execve
3. Wartebefehl:wait
Der Befehl wird vom übergeordneten Prozess verwendet, um auf das Ende des untergeordneten Prozesses zu warten. Wenn der übergeordnete Prozess einen untergeordneten Prozess erstellt und Sie den Code des übergeordneten Prozesses nach dem Ende des untergeordneten Prozesses weiterhin ausführen möchten, können Sie den wait
Befehl verwenden. wait
Der Befehl hält den übergeordneten Prozess an, bis der untergeordnete Prozess beendet wird. Wenn der untergeordnete Prozess beendet wurde, wait
kehrt der Befehl sofort zurück.
wait
Der Befehl hat keine Parameter und seine Syntax lautet wie folgt:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
Unter anderem status
wird der Parameter verwendet, um den Beendigungsstatus des untergeordneten Prozesses zu empfangen, der zur Bestimmung des Beendigungsstatus des untergeordneten Prozesses verwendet werden kann.
Zusammenfassend lässt sich sagen, fork
dass der Befehl zum Erstellen eines neuen Prozesses, exec
zum Ausführen eines neuen Programms im aktuellen Prozess und wait
zum Warten des übergeordneten Prozesses auf das Ende des untergeordneten Prozesses verwendet wird. Die Kombination dieser drei Befehle ermöglicht eine komplexe Prozessverwaltung und -steuerung.