Gaffel system ring linux

Gaffel system ring linux
Forksystemanropet brukes til å lage en ny prosess. Den nyopprettede prosessen er barneprosessen. Prosessen som kaller gaffel og oppretter en ny prosess er overordnet prosess. Barn- og foreldreprosessene utføres samtidig.

Men barnet og foreldreprosessene ligger på forskjellige minneområder. Disse minneområdene har samme innhold, og uansett hvilken operasjon som utføres av den ene prosessen, vil ikke påvirke den andre prosessen.

Når barneprosessene opprettes; Nå vil begge prosessene ha samme programteller (PC), så begge disse prosessene vil peke på den samme neste instruksjonen. Filene som er åpnet av overordnet prosess vil være de samme for barneprosessen.

Barneprosessen er nøyaktig den samme som foreldrene, men det er forskjell i prosessene ID -er:

  1. Prosess -IDen til barneprosessen er en unik prosess -ID som er forskjellig fra ID -ene for alle andre eksisterende prosesser.
  2. Foreldres prosess -ID vil være den samme som for prosess -IDen til barnets foreldre.

Egenskaper ved barneprosess

Følgende er noen av egenskapene som en barneprosess har:

  1. CPU -tellerne og ressursutnyttelsene initialiseres for å tilbakestilles til null.
  2. Når overordnet prosess avsluttes, mottar ikke barneprosesser noe signal fordi PR_SET_PDEATHSIG -attributt i PRCTL () tilbakestilles.
  3. Tråden pleide å ringe gaffel () oppretter barneprosessen. Så adressen til barneprosessen vil være den samme som foreldre.
  4. Filbeskrivelsen til overordnet prosess arves av barneprosessen. For eksempel vil forskyvningen av filen eller statusen til flagg og I/O -attributtene bli delt mellom filbeskrivelsene til barn- og overordnede prosesser. Så filbeskrivelse av foreldreklassen vil referere til samme filbeskrivelse av barneklasse.
  5. De åpne meldingskøbeskrivelsene til overordnet prosess arves av barneprosessen. For eksempel hvis en filbeskrivelse inneholder en melding i overordnet prosess, vil den samme meldingen være til stede i den tilsvarende filbeskrivelsen til barneprosessen. Så vi kan si at flaggverdiene til disse filbeskrivelsene er de samme.
  6. Tilsvarende åpne katalogstrømmer vil bli arvet av barneprosessene.
  7. Standard timer Slack -verdien til barneklassen er den samme som den nåværende tidtakerens slakkverdi av foreldreklassen.

Egenskaper som ikke er arvet etter barneprosess

Følgende er noen av egenskapene som ikke er arvet av en barneprosess:

  1. Minnelåser
  2. Det verserende signalet fra en barneklasse er tomt.
  3. Prosess Associated Record Locks (FCNTL ())
  4. Asynkron I/O -operasjoner og I/O -innhold.
  5. Katalog Endre varsler.
  6. Tidtakere som alarm (), setitimer () er ikke arvet av barneklassen.

gaffel () i C

Det er ingen argumenter i gaffel () og returtypen gaffel () er heltall. Du må ta med følgende toppfiler når gaffel () brukes:

#inkludere
#inkludere
#inkludere

Når du jobber med gaffel (), kan du brukes til type pid_t for prosesser ID -er som PID_T er definert i .

Hodefilen er hvor gaffel () er definert, så du må inkludere den til programmet ditt for å bruke gaffel ().

Returtypen er definert i og gaffel () samtalen er definert i . Derfor må du inkludere både i programmet ditt for å bruke gaffel () systemanrop.

Syntaks av gaffel ()

Syntaks av gaffel () systemanrop i Linux, Ubuntu er som følger:

pid_t gaffel (tomrom);

I syntaks er returtypen pid_t. Når barneprosessen opprettes vellykket, returneres PID for barneprosessen i foreldreprosessen og 0 vil bli returnert til selve barneprosessen.

Hvis det er noen feil, returneres ikke -1 til overordnede prosessen og barneprosessen opprettes ikke.

Ingen argumenter føres til gaffel ().

Eksempel 1: Ringer gaffel ()

Tenk på følgende eksempel der vi har brukt gaffel () systemanrop for å lage en ny barneprosess:

#inkludere
#inkludere
#inkludere
int main ()

gaffel();
printf ("Bruke gaffel () systemanrop \ n");
retur 0;

PRODUKSJON:

sysads@linuxhint $ gcc gaffel.C -o gaffel
sysads@linuxhint $ ./gaffel
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop

I dette programmet har vi brukt gaffel (), dette vil skape en ny barneprosess. Når barneprosessen opprettes, vil både foreldreprosessen og barneprosessen peke på neste instruksjon (samme programteller). På denne måten vil de gjenværende instruksjonene eller C -uttalelsene bli utført det totale antallet prosesstider, det vil si 2n ganger, der n er antallet gaffel () systemanrop.

Så når gaffel () samtalen brukes en gang som ovenfor (21 = 2) Vi vil ha produksjonen 2 ganger.

Her når gaffel () systemanrop brukes, vil den interne strukturen se ut som:

Tenk på følgende tilfelle der gaffelen () brukes 4 ganger:

#inkludere
#inkludere
#inkludere
int main ()

gaffel();
gaffel();
gaffel();
gaffel();
printf ("Bruke gaffel () systemanrop \ n");
retur 0;

Produksjon:

sysads@linuxhint $ gcc gaffel.C -o gaffel
sysads@linuxhint $ ./gaffel
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
Bruke gaffel () systemanrop
sysads@linuxhint $

Nå er det totale antallet prosessen som er opprettet 24 = 16 og vi har utskriftserklæringen utført 16 ganger.

Eksempel 2: Testing hvis gaffel () var vellykket

I det følgende eksemplet har vi brukt beslutningstakingskonstruksjonen for å teste verdien (int) returnert med gaffel (). Og de tilsvarende meldingene vises:

#inkludere
#inkludere
#inkludere
int main ()

pid_t p;
p = gaffel ();
if (p ==-1)

printf ("Det er en feil mens du ringer gaffel () \ n");

if (p == 0)

printf ("Vi er i barneprosessen \ n");

ellers

printf ("Vi er i overordnet prosess \ n");

retur 0;

PRODUKSJON:

sysads@linuxhint $ gcc gaffel.C -o gaffel
sysads@linuxhint $ ./gaffel
Vi er i foreldreprosessen
Vi er i barneprosessen

I eksemplet ovenfor har vi brukt typen PID_T som vil lagre returverdien på gaffelen (). gaffel () kalles online:

p = gaffel ();

Så heltallverdien som returneres med gaffel () lagres i P, og deretter blir P sammenlignet for å sjekke om gaffelen () samtalen var vellykket.

Når gaffelen () samtalen brukes og barnet opprettes med suksess, vil IDen til barneprosessen bli returnert til overordnet prosess og 0 vil bli returnert til barneprosessen.IDen til barneprosessen i overordnet prosess vil ikke være den samme som ID for barneprosessen i selve barneprosessen. I barneprosess vil ID for barneprosess være 0.

Med denne opplæringen kan du se hvordan du kommer i gang med gaffelsystemanropet i Linux.