Systemanrop

Gaffelsystemkall Linux

Gaffelsystemkall Linux

Gaffelsystemanrop

Gaffelsystemanropet brukes til å lage nye prosesser. Den nyopprettede prosessen er barneprosessen. Prosessen som kaller gaffel og skaper en ny prosess er foreldreprosessen. Barn- og foreldreprosessene utføres samtidig.

Men prosessene for barn og foreldre ligger i forskjellige hukommelsesrom. Disse minneområdene har samme innhold, og uansett hvilken operasjon som utføres av en prosess, påvirker ikke den andre prosessen.

Når barnet behandler er skapt; nå vil begge prosessene ha samme programteller (PC), så begge disse prosessene vil peke på samme neste instruksjon. Filene som er åpnet av foreldreprosessen, vil være de samme for barneprosessen.

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

  1. Prosess-ID-en for barneprosessen er en unik prosess-ID som er forskjellig fra ID-ene til alle andre eksisterende prosesser.
  2. Foreldreprosess-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-tellere og ressursutnyttingene initialiseres for å nullstille.
  2. Når foreldreprosessen avsluttes, mottar ikke underordnede prosesser noe signal fordi PR_SET_PDEATHSIG-attributtet i prctl () tilbakestilles.
  3. Tråden som brukes til å ringe fork () skaper barneprosessen. Så adressen til barneprosessen vil være den samme som foreldrenes.
  4. Filbeskrivelsen for foreldreprosessen arves av barneprosessen. For eksempel vil forskyvningen av filen eller flaggstatusen og I / O-attributtene deles mellom filbeskrivelsene til barn og foreldreprosesser. Så filbeskrivelse for overordnet klasse vil referere til samme filbeskrivelse for barneklasse.
  5. De åpne meldings-købeskrivelsene for foreldreprosessen arves av barneprosessen. For eksempel hvis en filbeskrivelse inneholder en melding i foreldreprosessen, vil den samme meldingen være tilstede i den tilsvarende filbeskrivelsen for barneprosessen. Så vi kan si at flaggverdiene til disse filbeskrivelsene er de samme.
  6. Tilsvarende åpne katalogstrømmer vil arves av underordnede prosesser.
  7. Standardverdien for timer-slakk i underklassen er den samme som gjeldende timer-slakk-verdi for overordnet klasse.

Egenskaper som ikke arves av Child-prosessen

Følgende er noen av egenskapene som ikke arves av en underordnet prosess:

  1. Minnelås
  2. Det ventende signalet fra en barneklasse er tomt.
  3. Behandle tilknyttede postlåser (fcntl ())
  4. Asynkrone I / O-operasjoner og I / O-innhold.
  5. Katalogendringsvarsler.
  6. Timere som alarm (), setitimer () arves ikke av barneklassen.

gaffel () i C

Det er ingen argumenter i gaffel (), og returtype gaffel () er heltall. Du må ta med følgende overskriftsfiler når fork () brukes:

#inkludere
#inkludere
#inkludere

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

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

Returtypen er definert i og fork () kall er definert i . Derfor må du ta med begge deler i programmet for å bruke fork () systemanrop.

Syntaks for gaffel ()

Syntaksen for fork () systemanrop i Linux, Ubuntu er som følger:

pid_t gaffel (ugyldig);

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

Hvis det er noen feil, returneres -1 til foreldreprosessen, og barneprosessen blir ikke opprettet.

Ingen argumenter sendes til gaffel (). 

Eksempel 1: Ringgaffel ()

Tenk på følgende eksempel der vi har brukt fork () systemanropet for å lage en ny underordnet prosess:

KODE:

#inkludere
#inkludere
#inkludere
int main ()

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

PRODUKSJON:

Bruker gaffel () systemanrop
Bruker gaffel () systemanrop

I dette programmet har vi brukt fork (), dette vil skape en ny barneprosess. Når barneprosessen er opprettet, vil både foreldreprosessen og barneprosessen peke på neste instruksjon (samme programteller). På denne måten blir de gjenværende instruksjonene eller C-setningene utført totalt antall prosess ganger, det vil si 2n ganger, hvor n er antall fork () systemanrop.

Så når fork ((call) brukes en gang som ovenfor (21 = 2) vi vil ha produksjonen vår to ganger.

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

Vurder følgende tilfelle der gaffelen () brukes fire ganger:

KODE:

#inkludere
#inkludere
#inkludere
int main ()

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

Produksjon:

Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruk gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruk gaffel () systemanrop Bruk gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop Bruke gaffel () systemanrop 

Nå er totalt antall prosesser som er opprettet 24 = 16 og vi har utskriftserklæringen utført 16 ganger.

Eksempel 2: Testing om gaffel () var vellykket

I det følgende eksemplet har vi brukt beslutningskonstruksjonen for å teste verdien (int) som returneres av gaffel (). Og de tilsvarende meldingene vises:

KODE:

#inkludere
#inkludere
#inkludere
int main ()

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

printf ("Det er en feil mens du ringer til fork ()");

hvis (p == 0)

printf ("Vi er i barneprosessen");

ellers

printf ("Vi er i foreldreprosessen");

retur 0;

PRODUKSJON:

Vi er i foreldreprosessen
Vi er i barneprosessen

I eksemplet ovenfor har vi brukt typen pid_t som vil lagre returverdien til gaffelen (). gaffel () kalles online:

p = gaffel ();

Så helverdien som returneres av gaffel () lagres i p, og deretter sammenlignes p for å sjekke om gaffel () -anropet vårt var vellykket.

Når fork () -anropet brukes og barnet er opprettet vellykket, vil ID-en for barneprosessen returneres til foreldreprosessen og 0 vil bli returnert til barneprosessen.ID-en for barneprosessen i foreldreprosessen vil ikke være den samme som ID-en for barneprosessen i selve barneprosessen. I barneprosessen vil ID for barneprosessen være 0.

Med denne veiledningen kan du se hvordan du kommer i gang med gaffelsystemanropet i Linux.

Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...
Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...