Fork

A HupWiki-ből...

fork(), mint rendszerhívás

A fork() rendszerhívással lehet egy új folyamatot létrehozni. A létrehozott gyermek-folyamat a szülő-folyamat pontos másolata lesz, vagyis a gyermek-folyamat a szülő-folyamat majdnem minden jellemzőjét örökli (a pid-et például nem!). A gyermek- és a szülő-folyamat egymással párhuzamosan fognak futni. A fork() rendszerhívás C nyelvben egy int típusú értékkel tér vissza, és ez az, ami alapján meg lehet különböztetni, hogy melyik a szülő- ill. melyik a gyermek-folyamat. A gyermek-folyamatban a visszatérési érték: 0, míg a szülő-folyamatban a visszatérési érték egyenlő a gyermek-folyamat pid-jével. Negatív visszatérési érték a rendszerhívás sikertelenségét jelzi (a hiba oka lehet például az, hogy nem volt elég memória a gyermek-folyamat létrehozásához).

Mi az, amit a gyermek-folyamat fork után a szülőtől örököl?

  • A folyamatot futtató felhasználóra vonatkozó információkat (a futtató felhasználó azonosítóját, a futtató felhasználó csoportjának az azonosítóját)
  • Effektív user id-et (ha a program setuid bites, akkor ez eltérhet a programot futtató felhasználó azonosítójától)
  • Effektív csoport azonosítót
  • Folyamat-csoport azonosítóját
  • Munkakönyvtár
  • Signal-kezelő eljárások
  • umask értéket

Mi az, ami a fork után eltér a szülő és a gyermek között?

  • Folyamat-azonosító
  • Szülő folyamat azonosítója
  • A gyermek folyamatnak saját másolata van a szülő folyamat fájlleíróiról
  • Ha a szülő valamikorra egy ALARM signalt kért, azt a gyermek nem fogja megkapni.


fork, mint fejlesztés elágazása

Ha egy program fejlesztése valamilyen oknál fogva elágazik, és több szálon halad tovább, akkor arra azt mondjuk (kicsit szleng), hogy a projekt forkolódott, azaz elágazott.