Süsteemikõned

Kahvli süsteem Helistage Linuxile

Kahvli süsteem Helistage Linuxile

Kahvli süsteemi kõne

Kahvli süsteemikõnet kasutatakse uue protsessi loomiseks. Vastloodud protsess on lapseprotsess. Protsess, mis kutsub kahvlit ja loob uue protsessi, on vanemprotsess. Lapse ja vanema protsessid viiakse läbi samaaegselt.

Kuid lapse ja vanema protsessid asuvad erinevates mäluruumides. Nendel mäluruumidel on sama sisu ja ükskõik milline ühe protsessi toiming ei mõjuta teist protsessi.

Kui laps protsessid on loodud; nüüd on mõlemal protsessil sama programmiloendur (PC), nii et mõlemad protsessid osutavad samale järgmisele käsule. Vanemprotsessi poolt avatud failid on alamprotsessi jaoks samad.

Lapse protsess on täpselt sama, mis tema vanem, kuid protsesside ID-des on erinevusi:

  1. Alamprotsessi ID on kordumatu protsessi ID, mis erineb kõigi teiste olemasolevate protsesside ID-dest.
  2. Vanema protsessi ID on sama, mis lapse vanema protsessi ID-l.

Lapse protsessi omadused

Järgmised on mõned lapse protsessil olevad omadused:

  1. Protsessori loendurid ja ressursside kasutamine lähtestatakse nulli lähtestamiseks.
  2. Kui vanemprotsess on lõpetatud, ei võta alamprotsessid signaali, kuna prctl () atribuut PR_SET_PDEATHSIG lähtestatakse.
  3. Kahvli () kutsumiseks kasutatav lõim loob lapseprotsessi. Nii et lapseprotsessi aadress on sama, mis vanemal.
  4. Vanemprotsessi failikirjeldaja on päritud lapsprotsessist. Näiteks jagatakse failide nihet või lippude olekut ja I / O atribuute lapse ja vanema protsesside failikirjeldajate vahel. Seega viitab vanemateklassi failikirjeldaja samale lapseklassi failikirjeldajale.
  5. Lapseprotsess pärib vanemaprotsessi avatud sõnumijärjekirjeldajad. Näiteks kui failikirjeldaja sisaldab vanemprotsessis olevat sõnumit, on sama sõnum ka alamprotsessi vastavas failikirjelduses. Nii võime öelda, et nende failikirjeldajate lipuväärtused on samad.
  6. Sarnaselt pärivad avatud kataloogivood ka lapseprotsessid.
  7. Lapseklassi vaikimisi taimeri lõtkuväärtus on sama kui vanemklassi praegune taimeri lõtkuväärtus.

Atribuudid, mida lapseprotsess ei päri

Järgmised on mõned omadused, mida lapseprotsess ei päri:

  1. Mälulukud
  2. Lasteklassi ootel signaal on tühi.
  3. Töötage seotud kirjelukud (fcntl ())
  4. Asünkroonsed sisend- ja väljundoperatsioonid ning sisend- ja väljundsisu.
  5. Kataloogi muutmise teatised.
  6. Selliseid taimereid nagu alarm (), setitimer () lapseklass ei päri.

kahvel () C-s

Hargis () pole argumente ja kahvli () tagasitüüp on täisarv. Hargi () kasutamisel peate lisama järgmised päisefailid:

# kaasata
# kaasata
# kaasata

Kahvliga töötamisel (), saab kasutada tüübi jaoks pid_t protsesside ID-d, kui pid_t on määratletud .

Päisefail kus on määratletud fork (), nii et kahvli () kasutamiseks peate selle lisama oma programmi.

Tagasitüübi tüüp on määratletud ja fork () kõne on määratletud jaotises . Seetõttu peate fork () süsteemikõne kasutamiseks lisama mõlemad oma programmi.

Kahvli süntaks ()

Fork () süsteemikõne süntaks Linuxis, Ubuntu, on järgmine:

pid_t kahvel (tühine);

Süntaksis on tagastustüüp pid_t. Kui lapseprotsess on edukalt loodud, tagastatakse lapseprotsessi PID vanemaprotsessis ja 0 tagastatakse lapseprotsessile endale.

Kui on mõni viga, tagastatakse vanemaprotsessile -1 ja alamprotsessi ei looda.

Kahvlile () ei edastata ühtegi argumenti. 

Näide 1: helistamishark ()

Vaadake järgmist näidet, milles oleme uue lapseprotsessi loomiseks kasutanud süsteemi fork () kõnet:

KOOD:

# kaasata
# kaasata
# kaasata
int main ()

kahvel ();
printf ("süsteemi kahvli () kasutamine \ n");
tagastama 0;

VÄLJUND:

Fork () süsteemi kõne kasutamine
Fork () süsteemi kõne kasutamine

Selles programmis oleme kasutanud kahvlit (), see loob uue lapseprotsessi. Lapseprotsessi loomisel osutavad nii vanemprotsess kui ka lapseprotsess järgmisele juhisele (sama programmiloendur). Sel viisil täidetakse ülejäänud käsud või C-laused kogu protsesside arv, see on 2n korda, kus n on kahvli () süsteemi kõnede arv.

Nii et kui kahvli () kõnet kasutatakse üks kord, nagu eespool (21 = 2) meil on väljund 2 korda.

Siin, kui kasutatakse süsteemi fork () kõnet, näeb sisemine struktuur välja selline:

Vaatleme järgmist juhtumit, kui kahvlit () kasutatakse 4 korda:

KOOD:

# kaasata
# kaasata
# kaasata
int main ()

kahvel ();
kahvel ();
kahvel ();
kahvel ();
printf ("Fork () süsteemikõne kasutamine");
tagastama 0;

Väljund:

Kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli kasutamine () süsteemikõne kahvli kasutamine () süsteemikõne kahvli () kasutamine süsteemikõne kasutamine kahvli () süsteemikõne kasutamine kahvli () kasutamine süsteemikõne kasutamine kahvli () kasutamine süsteemikõne (kahvel) () süsteemikõne kasutamine kahvli () süsteemikõne kasutamine 

Nüüd on loodud protsessi koguarv 24 = 16 ja meil on väljavõte 16 korda täidetud.

Näide 2: kahvli () edukuse testimine

Järgmises näites oleme kahvli () tagastatava väärtuse (int) testimiseks kasutanud otsuste tegemise konstruktsiooni. Ja kuvatakse vastavad teated:

KOOD:

# kaasata
# kaasata
# kaasata
int main ()

pid_t p;
p = kahvel ();
kui (p == - 1)

printf ("kahvli () helistamisel ilmnes viga");

kui (p == 0)

printf ("Oleme lapse protsessis");

muud

printf ("Oleme põhiprotsessis");

tagastama 0;

VÄLJUND:

Oleme lapsevanemate protsessis
Oleme lapse protsessis

Ülaltoodud näites oleme kasutanud tüüpi pid_t, mis salvestab kahvli () tagastusväärtuse. kahvlit () nimetatakse reale:

p = kahvel ();

Nii et kahvli () tagastatud täisarv väärtus salvestatakse p-s ja seejärel võrreldakse p-d, et kontrollida, kas meie kahvli () kõne õnnestus.

Kui fork () -kutset kasutatakse ja laps edukalt luuakse, tagastatakse lapseprotsessi ID vanemprotsessi ja 0 tagastatakse alamprotsessi.Lapseprotsessi ID vanemprotsessis ei ole sama, mis lapsprotsessi enda protsess. Lapseprotsessis on lapseprotsessi ID 0.

Selle õpetuse abil saate teada, kuidas alustada Linuxi kahvli süsteemi kutsega.

Kasulikud tööriistad Linuxi mängijatele
Kui teile meeldib Linuxis mänge mängida, on tõenäoline, et olete mängukogemuse parandamiseks kasutanud selliseid rakendusi ja utiliite nagu Wine, Lutr...
HD Remastered Games Linuxile, millel pole kunagi varem Linuxi väljalaset olnud
Paljud mängude arendajad ja kirjastajad pakuvad frantsiisi eluea pikendamiseks välja vanade mängude HD-remasteri. Palun fännid, kes soovivad ühilduvus...
Kuidas kasutada AutoKeyt Linuxi mängude automatiseerimiseks
AutoKey on Linuxi ja X11 töölaua automatiseerimise utiliit, mis on programmeeritud Python 3, GTK ja Qt. Selle skriptimise ja MACRO funktsionaalsuse ab...