
Envoyé par
REANS
Salut a tous .
je n'arrive pas a trouver que fait ce programme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
int i=4, j=10;
int main (){
pid_t pid;
pid=fork();
if (pid<0) exit(1);
j+=2;
if (pid==0) {
i*=3;
j*=3;
}
else {
i*=2;
j*=2;
}
printf("i= %d, j= %d" , i , j);
return(0);
} |
Ta question signifie que tu connais pas le fork() qui permet de créer un second processus en parallèle avec le programme en cours.
Donc le programme lance un processus fils avec fork() et vérifie que le fils a bien été créé (le test si pid < 0).
Une fois le fils créé, il y a 2 processus qui tournent. Dans le premier (le père), la variable pid qui a récupéré le résultat du fork contient le n° de pid du fils. Et dans le second (le fils), la variable pid vaut 0.
Donc chaque processus teste qui il est (fils si pid = 0 et père sinon) et la partie fils va multiplier i et j par 3 pendant que le père multiplie i et j par 2.
Et la ligne printf() étant hors du if sera exécutée par les deux processus père et fils. Donc t'auras 2 affichages, chacun affichant ses i et j locaux (car les variables i et j ont été dupliquées et chaque processus travaille sur sa propre copie).
Rajoute sous ce printf la ligne
printf("pid=%d, ppid=%d et variable pid=%d\n", getpid(), getppid(), pid)
et tu comprendras mieux...
Partager