Utilisation de fork()

Fermé
adiloc4444 Messages postés 2 Date d'inscription mercredi 21 octobre 2009 Statut Membre Dernière intervention 22 octobre 2009 - 22 oct. 2009 à 02:06
Ju_ju_12 Messages postés 12 Date d'inscription samedi 1 janvier 2011 Statut Membre Dernière intervention 29 janvier 2011 - 7 janv. 2011 à 16:36
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.

5 réponses

Ju_ju_12 Messages postés 12 Date d'inscription samedi 1 janvier 2011 Statut Membre Dernière intervention 29 janvier 2011 19
7 janv. 2011 à 16:36
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
fifreline Messages postés 173 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 23 octobre 2009 23
22 oct. 2009 à 03:24
x*2 ou x puissance 2 ?
f= 0 ou f = = O ?
0
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
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
22 oct. 2009 à 12:12
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
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
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298 > loupius
22 oct. 2009 à 14:49
forcément, on ne va pas coupé la mémoire en deux ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adiloc4444 Messages postés 2 Date d'inscription mercredi 21 octobre 2009 Statut Membre Dernière intervention 22 octobre 2009
22 oct. 2009 à 16:05
Merci loupius.
0
ce programme va cree trois processus fils!! mais combien de lignes seront imprimées lors de l'execution du programmme?
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148 > adelinoo
5 nov. 2009 à 00:23
Désolé, mais ta réponse est incomplète;
Bonne réflexion
0