Utilisation de fork()

adiloc4444 Messages postés 2 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.
Configuration: Windows XP Internet Explorer 7.0

5 réponses

  1. Ju_ju_12 Messages postés 14 Statut Membre 19
     
    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
  2. fifreline Messages postés 197 Statut Membre 23
     
    x*2 ou x puissance 2 ?
    f= 0 ou f = = O ?
    0
  3. loupius
     
    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
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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. loupius
       
      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
      1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > loupius
         
        forcément, on ne va pas coupé la mémoire en deux ;)
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. adiloc4444 Messages postés 2 Statut Membre
     
    Merci loupius.
    0
    1. adelinoo
       
      ce programme va cree trois processus fils!! mais combien de lignes seront imprimées lors de l'execution du programmme?
      0
      1. loupius Messages postés 789 Statut Membre 148 > adelinoo
         
        Désolé, mais ta réponse est incomplète;
        Bonne réflexion
        0