Procedura fork() përdoret për të krijuar procese të reja, i cili quhet proces fëmijë. Ky proces ekzekutohet në mënyrë paralele me procesin të cilin e thirri, i cili quhet dhe proces prind. Pasi krijohet nje proces i ri, të dy proceset do ekzekutojnë instruksionin pasardhës, që ndjek thirrjen fork.
Një proces fëmijë përdor të njëjtin regjistër PC (program counter), të njëjtit regjistra të CPU si dhe të njëjtit skedarë të hapur.
Procedura fork() është një thirrje sistemi. Kjo procedurë nuk merr parametra, dhe kthen si përgjigje një numër të plotë. Më poshtë janë vlera të ndryshme që mund të kthejë procedura fork().
Vlera negative: një vlerë e tillë kthehet kur krijimi i një procesi fëmijë rezulton i pasuksesshëm.
Vlera Zero: kjo vlerë kthehet nga procesi fëmijë i sapokrijuar.
Vlera pozitive: një vlerë e tillë kthehet nga procesi thirrës, ose ndryshe procesi prind. Vlera tregon processID e procesit të sapokrijuar.
Parashikoni cfarë afishohet nga programi i mëposhtëm:
#include "stdio.h" #include "sys/types.h" #include "unistd.h" int main() { fork(); printf("Hello world!\n"); return 0; }
Afishohet:
Hello world! Hello world!
Llogaritni sa herë do afishohet Hello
#include "stdio.h" #include "sys/types.h" int main() { fork(); fork(); fork(); printf("hello\n"); return 0; }
Afishohet:
hello hello hello hello hello hello hello hello
Numri i herëve që do afishohet Hello, është i njëjtë me numrin e proceseve të krijuar.
Numri total i proceseve është 2n, ku n është numri i thirrjeve fork.
Pra, kur n=3, numri total i proceseve do jetë 8.
Procesi i parë P0, me thirrjen e parë fork, krijon P1.
Me thirrjen e dytë fork, krijohet P2 nga P0, dhe P3 nga P1.
Me thirrjen e trete fork, krijohet P4 nga P0, P5 nga P1, P6 nga P2 dhe P7 nga P3.
Vini re që proceset prind dhe femijë ekzekutojnë të njëjtin program, por kjo nuk do të thotë se janë identik. Sistemi i shfrytëzimit iu alokon të dhëna të ndryshme, gjendje të ndryshme, gjithashtu rrjedha e kontrollit e këtyre proceseve mund të jetë e ndryshme.
Bazuar në librin Modern Operating Systems, me autor Andrew Tanenbaum