Utilisation de fork()

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.
Configuration: Windows XP Internet Explorer 7.0

5 réponses

  1. 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 ;-)
    2
    1. x*2 ou x puissance 2 ?
      f= 0 ou f = = O ?
      0
      1. 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.
        0
        1. Contributeur
          Si je ne me trompe pas, les processus père et fils (ainsi que frères) ne partagent pas la même mémoire.
          0
          1. Exact (c'est ce qui différencie le 'fork' du 'thread'), mais il ne faut pas oublier qu'avant il y a duplication des variables existantes.
            0
          2. Contributeur
            @loupiusforcément, on ne va pas coupé la mémoire en deux ;)
            0
        2. Merci loupius.
          0
          1. ce programme va cree trois processus fils!! mais combien de lignes seront imprimées lors de l'execution du programmme?
            0
          2. @adelinooDésolé, mais ta réponse est incomplète;
            Bonne réflexion
            0