exec
Der Systemaufruf, der den Inhalt eines Prozesses gegen ein anderes Programm austauscht – derselbe Prozess, neuer Code.
Während fork() einen neuen Prozess erzeugt, behält exec() den Prozess bei, verwirft aber dessen Speicher, lädt eine neue ausführbare Datei und startet an deren Einstiegspunkt neu. PID, offene Dateideskriptoren und Arbeitsverzeichnis bleiben erhalten. Ist der Aufruf erfolgreich, kehrt er nie zurück – es gibt keinen Code mehr, zu dem man zurückkehren könnte.
Die Kombination aus fork und anschließendem exec ist die Art, wie Unix Programme startet, und die Trennung ist Absicht: Zwischen den beiden Aufrufen kann das Kind Dinge ändern, die für das neue Programm gelten sollen – Standardausgabe umleiten, Umgebungsvariablen setzen, Rechte abgeben. Genau das macht eine Shell, wenn man einen Befehl mit > eintippt.