Selles artiklis näitan teile, kuidas kasutada fork () süsteemikõnet, et luua C -s alamprotsesse. Niisiis, alustame.
fork () Süntaks ja tagastusväärtus:
Funktsiooni kahvli () süntaks on järgmine:
pid_t kahvel(tühine);
Süsteemi funktsioon fork () ei aktsepteeri ühtegi argumenti. Tagastab seda tüüpi täisarvu pid_t .
Edu korral tagastab kahvel () alamprotsessi PID -i, mis on suurem kui 0. Alamprotsessi tagastamisväärtus on 0. Kui kahvel () ebaõnnestub, tagastab see -1.
Lihtne kahvel () Näide:
Allpool on toodud lihtne kahvli () näide:
#kaasake
#kaasake
#kaasake
#kaasake
#kaasake
intpeamine(tühine) {
pid_t pid=kahvel();
kui(pid== 0) {
printf ('Laps => PPID: %d PID: %d n',äge(),loll());
väljumine (EXIT_SUCCESS);
}
muidu kui(pid> 0) {
printf ('Vanem => PID: %d n',loll());
printf ('Ootan lapse protsessi lõpuleviimist. n');
oota(NULL);
printf ('Lapseprotsess on lõppenud. n');
}
muidu {
printf („Alamprotsessi ei saa luua. n');
}
tagasiEXIT_SUCCESS;
}
Siin kasutasin kahvlit (), et luua põhi-/vanemprotsessist alamprotsess. Seejärel printisin PID (protsessi ID) ja PPID (vanemprotsessi ID) alam- ja vanemprotsessist. Vanemprotsessis ootamist (NULL) kasutatakse alamprotsessi lõppemise ootamiseks. Alamprotsessis kasutatakse alamprotsessi lõpetamiseks exit (). Nagu näete, on vanemprotsessi PID alamprotsessi PPID. Niisiis, lapse protsess 24738 kuulub vanemprotsessi 24731 .
Funktsioone saate kasutada ka oma programmi modulaarsemaks muutmiseks. Siin ma kasutasin processTask () ja parentTask () funktsioone vastavalt lapse ja vanema protsessidele. Nii kasutatakse tegelikult kahvlit ().
#kaasake#kaasake
#kaasake
#kaasake
#kaasake
tühinelapsülesanne() {
printf ('Tere, Maailm n');
}
tühineparentTask() {
printf ('Peamine ülesanne. n');
}
intpeamine(tühine) {
pid_t pid=kahvel();
kui(pid== 0) {
lapsülesanne();
väljumine (EXIT_SUCCESS);
}
muidu kui(pid> 0) {
oota(NULL);
parentTask();
}
muidu {
printf ('Alamprotsessi ei saa luua.');
}
tagasiEXIT_SUCCESS;
}
Ülaltoodud programmi väljund:
Mitme lapsprotsessi käivitamine kahvli () ja silmuse abil:
Lingi abil saate luua ka nii palju alamprotsesse kui vaja. Allolevas näites olen loonud loopi jaoks 5 alamprotsessi. Trükkisin ka PID ja PPID alamprotsessidest.
#kaasake#kaasake
#kaasake
#kaasake
#kaasake
intpeamine(tühine) {
eest(inti= 1;i<= 5;i++) {
pid_t pid=kahvel();
kui(pid== 0) {
printf ('Alamprotsess => PPID =%d, PID =%d n',äge(),loll());
väljumine (0);
}
muidu {
printf ('Vanemprotsess => PID =%d n',loll());
printf ('Ootan, kuni lapsprotsessid lõpevad ... n');
oota(NULL);
printf ('lapsprotsess lõppes. n');
}
}
tagasiEXIT_SUCCESS;
}
Nagu näete, on vanemprotsessi ID kõigis alamprotsessides sama. Niisiis, kõik nad kuuluvad samale vanemale. Nad täidavad ka lineaarselt. Üksteise järel. Lapseprotsesside juhtimine on keerukas ülesanne. Kui õpite lisateavet Linuxi süsteemide programmeerimise ja selle toimimise kohta, saate nende protsesside voogu igal juhul kontrollida.
Tegeliku elu näide:
Erinevad keerulised matemaatilised arvutused, nagu md5, sha256 jne, räsimoodustus nõuavad palju töötlemisvõimsust. Selle asemel, et arvutada selliseid asju põhiprogrammiga samas protsessis, saate lihtsalt arvutada alamprotsessi räsi ja naasta räsipõhiprotsessile.
Järgmises näites olen loonud alamprotsessis neljakohalise PIN-koodi ja saatnud selle põhiprogrammi vanemprotsessile. Seejärel printisin sealt PIN -koodi.
#kaasake#kaasake
#kaasake
#kaasake
#kaasake
intgetPIN() {
// kasutage seemneks PPID ja PID
srand (loll() +äge());
intsaladus= 1000 + rida () % 9000;
tagasisaladus;
}
intpeamine(tühine) {
intfd[2];
toru(fd);
pid_t pid=kahvel();
kui(pid> 0) {
Sulge(0);
Sulge(fd[1]);
pärast(fd[0]);
intsalajane number;
suurus_treadBytes=loe(fd[0], &salajane number, suurus(salajane number));
printf ('PIN -koodi ootamine ... n');
oota(NULL);
printf ('Baiti loetud: %ld n',readBytes);
printf ('PIN -kood: %d n',salajane number);
}
muidu kui(pid== 0) {
Sulge(1);
Sulge(fd[0]);
pärast(fd[1]);
intsaladus=getPIN();
kirjutada(fd[1], &saladus, suurus(saladus));
väljumine (EXIT_SUCCESS);
}
tagasiEXIT_SUCCESS;
}
Nagu näete, saan iga kord programmi käivitades erineva 4-kohalise PIN-koodi.
Niisiis, põhimõtteliselt kasutate Linuxis kahvli () süsteemikõnet. Täname, et lugesite seda artiklit.