Fork (informatica)

Een fork is een concept uit de informatica waarmee bedoeld wordt dat een proces een kopie van zichzelf maakt.

Wanneer een programma een nieuw proces wil starten dat gelijktijdig (ook wel parallel of concurrent genoemd) uitgevoerd wordt met het proces van het programma zelf, kan het het besturingssysteem door middel van de systeemaanroep fork() de opdracht geven een fork uit te voeren.

Het besturingssysteem creëert vervolgens een nieuw proces dat een exacte kopie is van het proces dat opdracht gaf een fork uit te voeren, inclusief de programmacode, de (inhoud van) de variabelen en de inhoud van de geheugensegmenten die bij het programma horen. Het enige verschil is dat het nieuw proces een andere process identifier (PID) heeft.

Het nieuw proces (het kindproces) wordt nu meteen gestart en begint met de eerstvolgende instructie na de fork. Ook het originele proces (het ouderproces) gaat verder met de uitvoering en natuurlijk ook met de eerstvolgende instructie na de fork. Er lopen nu dus twee vrijwel identieke processen die alleen een andere PID hebben.

Omdat beide processen dezelfde programmacode gebruiken, namelijk die van het originele proces dat de fork uitvoerde, moet deze programmacode zowel de functionaliteit van het ouderproces als die van het kindproces bevatten. Welke van de twee uitgevoerd moet worden, wordt bepaald aan de hand van de returnwaarde van fork(): in het kindproces geeft fork() de waarde 0 terug als returnwaarde en in het ouderproces de PID van het nieuw gecreëerde proces (deze is altijd groter dan 0: het procesid 0 is gereserveerd voor het speciale init-proces dat tijdens het opstarten van het systeem gecreëerd wordt).

In vele gevallen wordt de fork echter gebruikt om een ander programma op te starten door middel van een exec call. De woorden fork en exec worden dan ook veelal in een adem genoemd.