Code :
- #include<stdio.h>
- #include<stdlib.h>
- #include<unistd.h>
- int main(void){
- pid_t pid_fils[5];
- int i;
- for(i=0; i<4; i++){
- pid_fils[i]=fork();
- if(pid_fils[i]==-1){
- printf("error" );
- exit(1);
- }
- if(pid_fils[i]==0){
- printf("je suis le fils%d\n", i+1);
- break;
- }
- }
- return 0;
- }
|
Harkonnen a écrit :
3 - J'avoue que je ne comprends pourquoi ton énoncé suppose qu'un fils pourrait créer d'autres fils. Si tu fais 5 fork(), tu vas créer 5 processus enfants du processus qui appelle le fork(), à aucun moment les fils ne crééront de fils dans la boucle for (ou alors tu n'as pas posté tout ton énoncé)
|
Je n'ai programmé pas en C depuis fort longtemps mais le fork copie la mémoire du processus et place le pointeur d'exécution du nouveau processus exactement après le fork. Dans ce cas-ci, chaque fils commence en pleine boucle for et hérite de la valeur de i du parent lors du fork.
Dans le cas sans break, cela peut produire une arborescence d'environ 4*(4 +1)/2 processus.