fork und exec: wie Unix Programme startet
Kurz: Unix startet neue Programme in zwei Schritten: fork kopiert den laufenden Prozess, exec ersetzt in der Kopie das Programm durch ein anderes.
Genauer: So startet auch jeder Befehl in der Shell. Die Aufteilung ermöglicht, zwischen den beiden Schritten Einstellungen wie Umleitungen oder Rechte vorzunehmen.
Im Detail
- fork: Erzeugt einen Kindprozess mit fast identischem Zustand. Der Rückgabewert unterscheidet: im Elternprozess die Kind-PID, im Kind 0. Dank Copy-on-Write ist das billig.
- exec: Lädt ein neues Programm in den Prozess. Die PID bleibt, Speicher und Code werden ersetzt.
- wait: Der Elternprozess wartet mit
wait/waitpidauf das Ende des Kindes. Vergisst er das, bleibt ein Zombie-Prozess zurück. - Umleitung: Die Shell öffnet nach dem
forkund vorexecDateien (>) oder Pipes und setzt sie als Ein- und Ausgabe. - Windows: Kennt kein fork, sondern
CreateProcess, das beides vereint. - Moderne Alternativen:
posix_spawnundvforksparen Aufwand bei großen Prozessen. - Container: Der erste Prozess im Container ist PID 1 und muss verwaiste Kinder einsammeln.
Siehe auch: Prozesse und Signale