Fork

Fork is de systeemaanroep waarmee Linux een nieuw proces aanmaakt. Het ouderprocces wordt gekopieerd: het kindproces krijgt een identieke kopie van het geheugen, de open bestanden en de omgevingsvariabelen — maar heeft zijn eigen PID.

Hoe het werkt

Na een fork draaien zowel ouder als kind verder vanaf dezelfde plek in de code. Ze onderscheiden zich doordat fork() in het ouderproces de PID van het kind teruggeeft, en in het kindproces 0.

init (PID 1)
└── bash (PID 100)  ←── fork()
    └── ls (PID 101)   ←── kind

Fork + exec

Bijna altijd volgt een exec op een fork: het kindproces vervangt zijn geheugeninhoud door een nieuw programma. Zo start de shell een commando:

  1. Shell doet fork() → kopie van de shell
  2. Kopie doet exec("ls") → kopie wordt ls
  3. Originele shell wacht tot ls klaar is

Copy-on-write

Linux kopieert het geheugen niet meteen bij een fork — het markeert de pagina's als copy-on-write. Pas als ouder of kind iets schrijft, wordt die pagina daadwerkelijk gekopieerd. Dit maakt forken snel en goedkoop.

Zie ook

  • proces — wat een proces is
  • daemon — daemons forken zichzelf om los van de terminal te draaien
  • thread — lichtgewicht alternatief voor fork
linuxprocessenkernel