EMZETT.
Login

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/waitpid auf das Ende des Kindes. Vergisst er das, bleibt ein Zombie-Prozess zurück.
  • Umleitung: Die Shell öffnet nach dem fork und vor exec Dateien (>) oder Pipes und setzt sie als Ein- und Ausgabe.
  • Windows: Kennt kein fork, sondern CreateProcess, das beides vereint.
  • Moderne Alternativen: posix_spawn und vfork sparen Aufwand bei großen Prozessen.
  • Container: Der erste Prozess im Container ist PID 1 und muss verwaiste Kinder einsammeln.

Siehe auch: Prozesse und Signale