Fork()
Är du nyfiken om hur fungerar fork() systemanrop . Läs vidare
Fork() – är systemanrop som för att skapa ett nytt barnprocess/child process i Linux operative system.
Om exekveringen av fork() lyckads då kommer både barnprocess/childprocess och föräldraprocess/parent process exekvera nästa efterföljande instruktion som kommer direkt efter fork().
För att kunna använda fork() systemanrop ska följande bibliotek vara inkluderade i din fil:
#include <include <sys/types.h>
#include<unistd.h>
Notera: Här kommer symbolen (^) representerar upphöjd.
Fork() systemanrop skapar ett nytt process genom att duplicera det anropprocessen. Där det anropprocessen kallas för parent process och det nytt skapade process för child process.
Under eller vid exekvering av fork() minnes innehåll av både parent och child process är samma.
Både parent och child process har sina egna separerade minnesutrymme.
Child processen har sin egen unik process ID och därmed skiljer sig från resterande existerande processerna.
Även om child process är exakt duplicerad av parent processen, den har sin unika process ID, eget minnes utrymme, förändringar som child processen görs med sitt minnesinhåll kommer inte påverka parent processen minnesinnehåll och detta gäller i motsatsen också.
Om man betecknar antalet av fork() med n då kommer vi kunna beräkna till exempel antal gånger som ”Hello” skrivs ut med hjälp av följande förmeln.
Antal som skrivs = 2^(n)
Vad som kommer att returneras beror på om exekveringen av fork() är lyckad eller misslyckad.
Vid lyckad exekvering:
Child process ID (PID) är rerturnerad hos parent process. Med andra ord parent process kommer att ha med sig child process PID. Däremot kommer child process returnerad noll, med andra ord kommer child process med sig noll.
Vid misslyckad exekvering:
Child process kommer inte skapas och parent process kommer returnera -1.
Det är bra ide att tilldela eller spara värdet som fork() kommer att returnera i ett variabel.
Variabeln är väldigt användbart; man kan använde den att styra exekveringen av programmet. Till exempel om vill något sepcifikt uppgift utförs enbart av child process eller parent process. Man kan också hitta process ID (PID) om de olika processerna.
I efterkommande exempel antar vi att exekveringen av fork() lyckas och allt går rätt
Exempel 1
I det här exempel vi har ett fork() funktion och programmet kommer att skriva ut ”Hello”. P0, betecknar parent process och P1 child process.
fork(); // rad 1
printf("Hello"); // rad 2
Illustration av Exempel 1
Här kommer ordet “Hello” skrivs två gånger, en gång P0 och en gång P0. Man kan också beräkna i det här med hjälp av formeln: antalet ”Hello” = 2^(n), där
n = 1. Då 2^(1) = 2.
Exempel 2
I det här exempel vi har ett fork() funktion och programmet kommer att skriva ut ”Hello”. P0, betecknar parent process och P1 child process. Följande nya processer kommer att skapas av exekveringen av rad 2; P11, P2.
fork(); // rad 1
fork(); // rad 2
printf("Hello"); // rad 3
Illustration av Exempel 2
Här kommer ordet “Hello” skrivs fyra gånger, var och en av följande processer; P0, P1, P11 och P2 kommer skriva en gång ordet ”Hello”. Man kan också beräkna i det här med hjälp av formeln: antalet ”Hello” = 2^(n), där n = 1. Då 2^(2) = 4.
Exempel 3
I det här exempel vi har ett fork() funktion och programmet kommer att skriva ut ”Hello”. P0, betecknar parent process och P1 child process. Följande nya processer kommer att skapas av exekveringen av rad 3; P12, P111, P21 och P3.
fork(); //rad 1
fork(); //rad 2
fork(); //rad 3
printf("Hello"); // rad 4
Illustration av Exempel 3
Här kommer ordet “Hello” skrivs åtta gånger, var och en av följande processer; P0, P1, P11, P12, P111, P2, P21 och P3 kommer skriva en gång ordet ”Hello”. Man kan också beräkna i det här med hjälp av formeln: antalet ”Hello” = 2^(n), där n = 3. Då
2^(3) = 8.
Relaterade Video
Nedan kan du se videon som täcker ovan nämnda områdena:
Inget relaterade video i dagsläge
Relaterade Inlägg
- Inget relaterade inlägg i dagsläge
För Dig Som är Nyfiken
Upptäck Mer: