Im Linux-Betriebssystem gilt die Gabel als eine der wichtigsten und mächtigsten Funktionen. Es ermöglicht Ihnen, neue Prozesse basierend auf bereits vorhandenen Prozessen zu erstellen. Der Prozess, der fork ausführt, wird als übergeordneter Prozess bezeichnet, und der neue Prozess, der mit fork erstellt wurde, wird als untergeordneter Prozess bezeichnet.
Das Funktionsprinzip von fork besteht darin, dass beim Aufruf der fork-Funktion der gesamte Speicher und die Variablen des übergeordneten Prozesses in den untergeordneten Prozess kopiert werden. Dabei werden zwar alle Daten kopiert, aber sie werden nicht gemeinsam genutzt. Auf diese Weise erhält der untergeordnete Prozess eine exakte Kopie des Status des übergeordneten Prozesses zum Zeitpunkt des Fork-Aufrufs.
Fork hat einige interessante Features. Erstens führen beide Prozesse nach dem Aufruf von fork ihren Code weiterhin unabhängig voneinander aus. Dadurch können Sie parallele Prozesse erstellen und mehrere Aufgaben gleichzeitig ausführen. Zweitens sind zwei Prozesse das Ergebnis der Fork-Arbeit, aber sie haben unterschiedliche IDs, wodurch das Betriebssystem sie unterscheiden und verwalten kann.
Arbeitsprinzip
Nachdem ein untergeordneter Prozess erstellt wurde, werden beide Prozesse (Eltern und Kind) unmittelbar nach dem fork-Aufruf fortgesetzt, aber jeder Prozess hat seine eigene eindeutige Prozess-ID (PID). Das Ergebnis eines fork-Systemaufrufs hängt vom Kontext ab, in dem die Funktion aufgerufen wurde. Der übergeordnete Prozess erhält die PID des untergeordneten Prozesses und der untergeordnete Prozess erhält den Wert 0.
Der Hauptzweck von fork besteht darin, parallele Aufgaben in einem einzigen Programm zu erstellen. Beispielsweise kann ein übergeordneter Prozess zum Ausführen bestimmter Aufgaben und ein untergeordneter Prozess zum Ausführen anderer Aufgaben verwendet werden, sodass das Programm mehrere Aufgaben gleichzeitig ausführen kann.
Hauptfunktion
Das Linux-Betriebssystem bietet eine Reihe wichtiger Funktionen für die Arbeit mit Prozessen mit dem Fork-Mechanismus:
- fork() - erstellen Sie einen untergeordneten Prozess, indem Sie den gesamten Adressraum des übergeordneten Prozesses kopieren;
- wait() - warten, bis der untergeordnete Prozess abgeschlossen ist und seinen Status erhält;
- exec() - den Adressraum des aktuellen Prozesses durch einen neuen Prozess ersetzen;
- exit() - abschluss des aktuellen Prozesses;
- getpid() - abrufen der ID des aktuellen Prozesses;
- getppid() - abrufen der ID des übergeordneten Prozesses;
- kill() - senden eines Signals an einen anderen Prozess;
- sleep() - verzögert die Ausführung des aktuellen Prozesses um eine bestimmte Zeit;
- signal() - einstellen des Signalhandlers für den aktuellen Prozess;
- pipe() - erstellen eines anonymen Kanals für die Kommunikation zwischen Prozessen;
- dup() - duplizieren des Dateideskriptors;
- chdir() - ändern des aktuellen Arbeitsverzeichnisses;
- getcwd() - abrufen des aktuellen Arbeitsverzeichnisses;
Mit diesen Funktionen können Sie Prozesse erstellen und verwalten, zwischen ihnen kommunizieren, Signalhandler installieren, Arbeitsverzeichnisse ändern und andere wichtige Vorgänge ausführen.