Sistemos skambučiai

Šakių sistemos skambutis „Linux“

Šakių sistemos skambutis „Linux“

Šakių sistemos iškvietimas

Šakių sistemos iškvietimas naudojamas kuriant naujus procesus. Naujai sukurtas procesas yra vaiko procesas. Procesas, kuris reikalauja šakės ir sukuria naują procesą, yra pagrindinis procesas. Vaiko ir tėvų procesai vykdomi vienu metu.

Tačiau vaiko ir tėvų procesai yra skirtingose ​​atminties erdvėse. Šios atminties vietos turi tą patį turinį ir bet kokia vieno proceso operacija neturės įtakos kitam procesui.

Kai vaikas sukuria procesus; dabar abu procesai turės tą patį programų skaitiklį (PC), todėl abu šie procesai nurodys tą pačią kitą instrukciją. Tėvų proceso metu atidaryti failai bus vienodi vaiko procesui.

Vaiko procesas yra visiškai toks pat, kaip ir jo tėvai, tačiau procesų ID skiriasi:

  1. Antrinio proceso proceso ID yra unikalus proceso ID, kuris skiriasi nuo visų kitų esamų procesų ID.
  2. Tėvų proceso ID bus toks pat kaip vaiko tėvų proceso ID.

Vaiko proceso ypatybės

Toliau pateikiamos kelios vaiko proceso savybės:

  1. Procesoriaus skaitikliai ir išteklių panaudojimas inicializuojami, kad būtų galima nustatyti nulį.
  2. Kai pagrindinis procesas yra nutrauktas, antriniai procesai negauna jokio signalo, nes PR_SET_PDEATHSIG atributas prctl () yra atstatytas.
  3. Šaka, naudojama skambinti šakute (), sukuria vaiko procesą. Taigi vaiko proceso adresas bus toks pats kaip ir tėvų.
  4. Tėvų proceso failo aprašą paveldi antrinis procesas. Pvz., Failo arba vėliavų būsenos poslinkis ir įvesties / išvesties atributai bus bendrinami tarp antrinių ir pirminių procesų failų deskriptorių. Taigi tėvų klasės failų aprašas nurodys tą patį vaikų klasės failų aprašą.
  5. Tėvų proceso atvirų pranešimų eilių aprašus paveldi vaiko procesas. Pvz., Jei failo deskriptoriuje yra pranešimas pirminio proceso metu, tas pats pranešimas bus ir atitinkamame antrinio proceso failo deskriptoriuje. Taigi galime sakyti, kad šių failų deskriptorių žymos vertės yra vienodos.
  6. Panašiai atvirus katalogų srautus paveldės antriniai procesai.
  7. Numatytoji vaikų klasės „Timer“ laisvumo vertė yra tokia pati kaip ir dabartinė tėvų klasės laikmačio „slack“ vertė.

Savybės, kurių nepaveldi vaiko procesas

Toliau pateikiamos kelios savybės, kurių nepaveldi vaiko procesas:

  1. Atminties spynos
  2. Laukiantis vaikų klasės signalas yra tuščias.
  3. Apdoroti susietus įrašų užraktus (fcntl ())
  4. Asinchroninės įvesties / išvesties operacijos ir įvesties / išvesties turinys.
  5. Katalogo pakeitimo pranešimai.
  6. Tokių laikmačių kaip signalas (), setitimer () vaikų klasė nepaveldi.

šakutė () C

Šakėje () nėra argumentų, o šakutės () grąžinimo tipas yra sveikas skaičius. Kai naudojamas fork (), turite įtraukti šiuos antraštės failus:

# įtraukti
# įtraukti
# įtraukti

Dirbant su šakute (), gali būti naudojamas tipui pid_t procesams ID, kaip pid_t yra apibrėžtas .

Antraštės failas yra apibrėžta šakutė (), todėl jūs turite ją įtraukti į savo programą, kad galėtumėte naudoti šakę ().

Grąžinimo tipas apibrėžtas ir fork () skambutis yra apibrėžtas . Todėl, norėdami naudoti fork () sistemos iškvietimą, turite įtraukti abu į savo programą.

Šakės sintaksė ()

„Linux“, „Ubuntu“, „fork ()“ sistemos skambučio sintaksė yra tokia:

pid_t šakutė (negaliojanti);

Sintaksėje grąžinimo tipas yra pid_t. Kai vaiko procesas bus sėkmingai sukurtas, vaiko proceso PID bus grąžintas tėvų procese, o 0 bus grąžintas pačiam vaiko procesui.

Jei yra kokių nors klaidų, -1 grąžinamas į tėvų procesą, o antrasis procesas nėra sukurtas.

„Fork“ () argumentai neperduodami. 

1 pavyzdys: skambinimo šakutė ()

Apsvarstykite šį pavyzdį, kuriame mes panaudojome „fork ()“ sistemos iškvietimą, kad sukurtume naują vaiko procesą:

KODAS:

# įtraukti
# įtraukti
# įtraukti
int main ()

šakutė ();
printf ("Naudojant sistemos fork () skambutį \ n");
grąžinti 0;

IŠĖJIMAS:

Naudojant šakės () sistemos iškvietimą
Naudojant šakės () sistemos iškvietimą

Šioje programoje mes naudojome šakutę (), tai sukurs naują vaiko procesą. Sukūrus vaiko procesą, tiek tėvų, tiek vaiko procesas nurodys kitą instrukciją (tas pats programos skaitiklis). Tokiu būdu likusios instrukcijos arba C sakiniai bus įvykdyti iš viso proceso kartų, ty 2n kartų, kur n yra šakės () sistemos iškvietimų skaičius.

Taigi, kai šakės () skambutis naudojamas vieną kartą, kaip nurodyta aukščiau (21 = 2) mes turėsime savo produkciją 2 kartus.

Čia, kai naudojamas „fork ()“ sistemos iškvietimas, vidinė struktūra atrodys taip:

Apsvarstykite šį atvejį, kai šakutė () naudojama 4 kartus:

KODAS:

# įtraukti
# įtraukti
# įtraukti
int main ()

šakutė ();
šakutė ();
šakutė ();
šakutė ();
printf ("Naudojant sistemos šakės () skambutį");
grąžinti 0;

Išvestis:

Šakės () sistemos skambučio naudojimas Šakės () sistemos skambučio naudojimas Šakės () sistemos skambučio naudojimas Šakės () sistemos skambučio naudojimas Šakės () sistemos skambučio naudojimas Šakės () sistemos skambučio naudojimas Šakės () sistemos skambučio Naudojimas šakės () sistemos skambučio Naudojimasis šakės () () sistemos skambutis Naudojant šakę () sistemos skambutį Naudojant šakę () sistemos skambutį Naudojant šakę () sistemos skambutį Naudojant šakę () sistemos skambutį Naudojant šakę () sistemos skambutį Naudojant šakės () sistemos skambutį Naudojant šakės () sistemos skambutį 

Dabar bendras sukurto proceso skaičius yra 24 = 16, o atspausdintas pareiškimas įvykdytas 16 kartų.

2 pavyzdys: Patikrinti, ar šakutė () buvo sėkminga

Šiame pavyzdyje mes panaudojome sprendimų priėmimo konstrukciją, kad patikrintume šakės () grąžintą vertę (int). Ir rodomi atitinkami pranešimai:

KODAS:

# įtraukti
# įtraukti
# įtraukti
int main ()

pid_t p;
p = šakutė ();
jei (p == - 1)

printf ("Klaida skambinant šakute ()");

jei (p == 0)

printf („Mes esame vaiko procese“);

Kitas

printf („Mes esame pirminiame procese“);

grąžinti 0;

IŠĖJIMAS:

Mes esame tėvų procese
Mes esame vaiko procese

Ankstesniame pavyzdyje mes naudojome pid_t tipą, kuris išsaugos šakės grąžinimo vertę (). šakutė () vadinama linija:

p = šakutė ();

Taigi šakute () grąžinta sveiko skaičiaus reikšmė yra išsaugoma p, o po to p palyginama, kad patikrintume, ar mūsų šakės () skambutis buvo sėkmingas.

Kai bus naudojamas šakės () iškvietimas ir vaikas bus sėkmingai sukurtas, vaiko proceso ID bus grąžintas tėvų procesui ir 0 bus grąžintas vaiko procesui.Vaiko proceso ID tėvų procese nebus tas pats, kaip vaiko proceso ID pačiame vaiko procese. Vaiko procese vaiko proceso ID bus 0.

Šioje pamokoje galite pamatyti, kaip pradėti naudoti šakės sistemos iškvietimą „Linux“.

Kaip atsisiųsti ir paleisti „Sid Meier Civilization VI“ sistemoje „Linux“
Įvadas į žaidimą „Civilization 6“ yra šiuolaikinė klasikinės koncepcijos, pristatytos „Age of Empires“ žaidimų serijoje, koncepcija. Idėja buvo gana p...
Kaip įdiegti ir žaisti „Doom“ sistemoje „Linux“
Įvadas į Doom „Doom“ serija atsirado 90-aisiais, išleidus originalų „Doom“. Tai buvo tiesioginis hitas, o nuo to laiko žaidimų serija gavo daugybę apd...
„Vulkan“, skirta „Linux“ vartotojams
Kiekvienos naujos kartos grafikos plokštės matome, kaip žaidimų kūrėjai peržengia grafinės ištikimybės ribas ir artėja prie fotorealizmo. Nepaisant vi...