Utilisation de fork()
adiloc4444
Messages postés
2
Statut
Membre
-
Ju_ju_12 Messages postés 14 Statut Membre -
Ju_ju_12 Messages postés 14 Statut Membre -
Bonsoir.
J'ai du mal a comprendre l'effet de cette fonction surtout lorsqu'il s'agit des boucles.
Voila un petit exercice qui me gène :
void main {
int i,f,x;
x=1;
For(i=0; i<3;i++) {
f=fork()
if(f==0) { x=x*2;
printf( " pid %d : %d" ,getpid() , x);
}
}
exit(0);
}
Si je me trompe pas, le processus père va créer 3 processus fils avex les valeurs de x respctivement 2,4 et 8.
je suis pas convaicu .j'ai besoin de votre aide svp !!
Merci d'avance.
J'ai du mal a comprendre l'effet de cette fonction surtout lorsqu'il s'agit des boucles.
Voila un petit exercice qui me gène :
void main {
int i,f,x;
x=1;
For(i=0; i<3;i++) {
f=fork()
if(f==0) { x=x*2;
printf( " pid %d : %d" ,getpid() , x);
}
}
exit(0);
}
Si je me trompe pas, le processus père va créer 3 processus fils avex les valeurs de x respctivement 2,4 et 8.
je suis pas convaicu .j'ai besoin de votre aide svp !!
Merci d'avance.
Configuration: Windows XP Internet Explorer 7.0
5 réponses
-
Avec fork tu crée des processus lourds donc espace mémoire non partagé meme par les ariables globales.
Le PID du fils vaut 0 il y a toujours des if de ce style quand tu bosse sur avec des fork peut etre cui la t'aidera a comprendre
http://www.jecompile.com/viewthread.php?tid=53
mais en gros 2 fais 'fois 2' sur le nb de processus crées a chaque fork ;-) -
-
A toi de faire les tests en complétant ton code. Voici un exemple à adapter à ton OS:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { int i, f, x = 1; for(i=0; i<3; i++) { if ((f = fork()) == -1) { printf ("Erreur fork\n"); return (EXIT_FAILURE); } if (f==0) { x = x*2; printf(" fils: pid %d : x = %d\n" ,getpid() , x); } else printf(" père: pid %d : x = %d\n" ,getpid() , x); } return (EXIT_SUCCESS); }Ne sois pas surpris par le résultat; le programme fonctionne bien et , bien sûr, je te laisse interpréter ce résultat qui est plein d'enseignements.
Ce code n'est pas tout à fait correct car on doit attendre la fin des fils avant de terminer le programme. Mais ceci n'est qu'un exemple pour 'fork'.
Bonne continuation. -
Si je ne me trompe pas, les processus père et fils (ainsi que frères) ne partagent pas la même mémoire.
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -