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:
- Alamprotsessi ID on kordumatu protsessi ID, mis erineb kõigi teiste olemasolevate protsesside ID-dest.
- Vanema protsessi ID on sama, mis lapse vanema protsessi ID-l.
Lapse protsessi omadused
Järgmised on mõned lapse protsessil olevad omadused:
- Protsessori loendurid ja ressursside kasutamine lähtestatakse nulli lähtestamiseks.
- Kui vanemprotsess on lõpetatud, ei võta alamprotsessid signaali, kuna prctl () atribuut PR_SET_PDEATHSIG lähtestatakse.
- Kahvli () kutsumiseks kasutatav lõim loob lapseprotsessi. Nii et lapseprotsessi aadress on sama, mis vanemal.
- 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.
- 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.
- Sarnaselt pärivad avatud kataloogivood ka lapseprotsessid.
- 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:
- Mälulukud
- Lasteklassi ootel signaal on tühi.
- Töötage seotud kirjelukud (fcntl ())
- Asünkroonsed sisend- ja väljundoperatsioonid ning sisend- ja väljundsisu.
- Kataloogi muutmise teatised.
- 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 (),
Päisefail
Tagasitüübi tüüp on määratletud
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 kasutamineFork () 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 protsessisOleme 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.