Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Fonction Fork



  1. #1
    NAGHAM

    Fonction Fork


    ------

    j'ai du mal à comprendre la fonction fork,en fait à chaque fois je me trompe dans le nombre de fils qui etaient crés par un processus pere, par exemple

    main()
    int pid;
    if fork()!=0
    {PID=fork();
    sleep(5);}
    else
    {PID=fork();
    sleep(5);}
    }

    combien de processus engendre l'execusion de ce programma?
    ma reponse est 3.

    -----

  2. Publicité
  3. #2
    yoda1234

    Re : Fonction Fork

    Moi ce que j'ai du mal a comprendre c'est ton manque courtoisie:

    Rappel de notre charte:

    La courtoisie est de rigueur sur ce forum : pour une demande de renseignements bonjour et merci devraient être des automatismes.
    Pour la modération.

    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  4. #3
    invite765732342432
    Invité

    Re : Fonction Fork

    On va découper le truc pour y voir plus clair:
    main() => 1 processus P1 entre ici
    int pid;
    if fork()!=0 => 1 processus P2 supplémentaire est créé
    { => ici le processus P1 continue
    PID=fork(); => Nouveau fork crée P1.1
    sleep(5); => le processus P1.1 ET le processus P1 arrivent ici
    }
    else
    { => ici le processus P2 "commence"
    PID=fork(); => Nouveau fork crée P2.1
    sleep(5); => le processus P2.1 ET le processus P2 arrivent ici
    }
    } => les processus P1, P1.1, P2, P2.2 arrivent ici et se terminent
    Y vois-tu un peu plus clair ?

  5. #4
    polo974

    Re : Fonction Fork

    en fait, il faut lire la doc:
    sous unix: man fork()
    ailleurs: google man fork()

    man fork() ...
    Valeur Renvoyée

    En cas de succès, le PID du fils est renvoyé au processus parent, et 0 est renvoyé au processus fils. En cas d'échec -1 est renvoyé dans le contexte du parent, aucun processus fils n'est créé, et errno contient le code d'erreur.
    ...
    Tous les processus sortent de fork().
    Donc la valeur de retour de la fonction te dit qui tu es:
    0: l'enfant
    -1: le parent en deuil de son enfant qui n'a pu voir le jour
    autre: l'heureux parent de l'enfant prénommé PID

    Bref en testant cette valeur, la suite du programme sait qui il est.

    En passant pid n'est pas égal à PID (C is case sensitive).

    Autre fonction sympa pour se genre de casse tête (qui suis-je à la sortie de la fonction?), voir setjump et longjump...

  6. A voir en vidéo sur Futura
  7. #5
    NAGHAM

    Re : Fonction Fork

    bonsoir à tout le monde
    merci d'avoir pris la peine de me répondre
    enfin j'ai bien compris ce que vs venez de m'expliquer, ce programme genere 4 processus P1, P2, P1.1,et enfin P1.2 mais
    est ce que le INIT est inclus?
    est ce qu'on doit pas avoir l'instruction pid=fork() pour pouvoir créer un processus fils(c'est-à-dire comment lors de l'instruction if fork()!=0 le processus P1 a été crée?)
    voilà merci d'avance

  8. #6
    invite765732342432
    Invité

    Re : Fonction Fork

    Citation Envoyé par NAGHAM Voir le message
    bonsoir à tout le monde
    merci d'avoir pris la peine de me répondre
    enfin j'ai bien compris ce que vs venez de m'expliquer, ce programme genere 4 processus P1, P2, P1.1,et enfin P1.2 mais
    est ce que le INIT est inclus?
    P1 est les processus principal. Il y a donc 3 fils en plus du processus "Init".

    est ce qu'on doit pas avoir l'instruction pid=fork() pour pouvoir créer un processus fils(c'est-à-dire comment lors de l'instruction if fork()!=0 le processus P1 a été crée?)
    Bon, il va falloir revoir les bases: n'hésite pas à demander à un camarade un peu d'aide. Je vais essayer de t'expliquer, mais en face à face, c'est plus facile...
    la fonction fork, quelle que soit les conditions de son appel, crée un processus fils (en plus du processus actuel).
    Lorsque tu écris pid=fork(), tu demandes simplement que soit retourné le résultat de la fonction fork dans la variable pid.

    Quand tu écris if (fork() != 0), la fonction fork est appelée, et son retour, au lieu d'être stocké dans une variable, est comparé à 0.
    Ce serait la même chose que si il était écrit:
    pid=fork();
    if (pid != 0) ...

    Comprends-tu ?

    A noter: le concept de fonction est assez simple. Si tu as eu un soucis pour comprendre le système, c'est qu'il te manque quelques bases.
    Sachant que fork est une notion avancée, il faut à tout prix que tu sois à l'aise avec les bases avant de te lancer.

  9. Publicité
  10. #7
    NAGHAM

    Re : Fonction Fork

    rebonsoir
    oui j'ai saisi ce que tu vient de me dire,merci
    en fait y-t-il pas des liens ou livres pour que je me debroiulle
    enfin ça fait une semaine qu'on est demandé d'ecrire un programme qui engendre une arbre au niveau 3 et malheuresement on n'est pas arrivé , on travaille en groupe
    à titre d'indication on travaille sur linux
    mercii nfiniment monsieur!

  11. #8
    invite765732342432
    Invité

    Re : Fonction Fork

    Citation Envoyé par NAGHAM Voir le message
    oui j'ai saisi ce que tu vient de me dire,merci
    Ok, parfait.

    en fait y-t-il pas des liens ou livres pour que je me debroiulle
    Si tu cherches "tutoriel fork C" ou "tutorial fork C" tu auras pas mal d'infos... Mais rien ne remplace pour ce genre de concepts un vrai "prof" (ou un ami qui s'y connais)

    enfin ça fait une semaine qu'on est demandé d'ecrire un programme qui engendre une arbre au niveau 3 et malheuresement on n'est pas arrivé , on travaille en groupe
    Euh... je ne vois pas bien le lien entre arbre niveau 3 et fork...
    Mais sur le net on trouve pas mal d'infos sur les arbres, les forks, etc, ça devrait t'aider.

    Bon courage !

  12. #9
    NAGHAM

    Re : Fonction Fork

    bonsoir
    merci infiniment
    gentil de votre part de m'aider
    bonne soirée

  13. #10
    polo974

    Re : Fonction Fork

    Si le but est d'avoir un arbre (dénomination bizarre, sauf si on fait intervenir le temps) de 3eme niveau, il suffit de fait:
    Code:
    //T0 un seul processus
    f1=fork();
    // T1 2 processus
    f2=fork();
    // T2 4 processus
    f3=fork();
    // T3 8 processus
    /*
    | T0 un seul processus
    |\
    | \
    |  \
    |   \ 1er fork
    |    \
    |     \
    |      \
    |       | T1 2 processus
    |\      |\
    | \     | \ 2eme fork
    |  \    |  \
    |   |   |   | T2 4 processus
    |\  |\  |\  |\ 3e fork
    | | | | | | | | T4  8 processus
    */
    et il suffit de tester les f1, f2 et f3 pour savoir qui est qui...

Discussions similaires

  1. Fonction racine carrée et fonction cube
    Par oversoul dans le forum Mathématiques du collège et du lycée
    Réponses: 10
    Dernier message: 15/10/2008, 15h43
  2. comparaison fonction exponentielle et fonction carrée
    Par pitiponks dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 26/02/2008, 19h27
  3. Passage fonction définie en paramétrique à fonction implicite ?
    Par brachiman dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 27/03/2007, 22h38
  4. Fonction réciproque d'une fonction composée ??
    Par Gucci-style dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 06/10/2006, 22h33
  5. fonction logarithme (étude de fonction)
    Par juline dans le forum Mathématiques du supérieur
    Réponses: 29
    Dernier message: 24/04/2005, 21h58
Découvrez nos comparatifs produits sur l'informatique et les technologies.