Der Systemaufruf fork sorgt dafür, dass vom aufrufenden Prozess (Elternprozess) eine exakte Kopie (Kindprozess) erzeugt wird. Der Kindprozess erhält eine eigene Prozess-ID, übernimmt sonst aber alle Informationen des Elternprozesses: Programmtext, Datensegment, Befehlszähler, etc.
Prof. Dr. Carsten Vogt von der TH Köln hat ein Video zum fork-Systemaufruf bereitgestellt:
Wenn Sie dieses Element öffnen, werden Inhalte von externen Dienstleistern geladen und dadurch Ihre IP-Adresse an diese übertragen.
Der Kindprozess wird direkt nach dem fork unabhängig vom Elternprozess als eigenständige Instanz auf dem System verwaltet und ausgeführt. Sowohl Eltern- als auch Kindprozess laufen nach dem "klonen" an gleicher Stelle weiter: Der Rückgabewert von fork wird geliefert und die direkt auf das fork folgende Anweisung wird ausgeführt.
Unter http://de.wikipedia.org/wiki/Fork_%28Unix%29 findet sich ein Beispiel, welches den Aufruf der fork-Funktion zeigt, und bei dem anhand des Rückgabewertes entschieden wird, ob man sich im Elternprozess, oder im Kindprozess befindet.
Prof. Dr. Carsten Vogt von der TH Köln zeigt und erläutert in seinem Video, wie eine Variable durch ein fork sowohl im Vater-, als auch im Sohn-Prozess existiert und unabhängig voneinander mit Werten belegt sein kann.
Schau es dir an!
Was passiert eigentlich bei mehrmaligem Aufruf von fork?
Betrachte den C-Quelltext aus Listing 1 unten. Was denkst Du: Wieviele Prozesse werden durch die Ausführung des Programms insgesamt erzeugt?
Falls du vorhast den Quelltext auf einem Unix-/Linux-System zu compillieren und auszuführen:
#include <stdio.h>
#include <unistd.h>
int main ()
{
int pid;
pid = fork();
pid = fork();
pid = fork();
pid = fork();
printf("Hier ist ein Prozess mit ID %d!\n", getpid());
return 0;
}
Listing 1: fork mehrmals nacheinander
Könnte bei Ausführung des Systemaufrufs fork auch der DMA-Controller zum Einsatz kommen? Erläutere warum das Sinn macht!
Schaust du dir die Unterschiede zwischen fork und CreateProcess genauer an, so fällt auf, dass bei CreateProcess eine andere Anwendung gestartet wird, während fork lediglich eine Kopie eines bereits existierenden Prozesses erzeugt.
Wie kann mittels fork ein anderes Programm gestartet werden?
Erläutere mit deinen eigenen Worten die Vorgehensweise dabei!
Achilles 2006 gibt Hinweise dazu in Kapitel 3.2.1 und 3.2.2. (Studierende sind oftmals berechtigt, eine PDF-Version dieses Buches ohne entstehende Kosten über ihre Hochschulen von Springerlink zu beziehen.)
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png