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.