IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[debutant] fork et wait


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Par défaut [debutant] fork et wait
    Bonjour;
    je suis débutant en programmation Unix, et j'ai du mal à comprendre le fonctionnement de fork() et wait()

    Sur l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if (fork())
    {
        printf("jaune");
        wait(&status);
        printf("bleu");
        wait(&status);
        printf("rouge");
    }
    else 
    {
        if (fork())
        {
            printf("gris");
        }
        else
        {
            printf("noir");
            exec (commante); /*execution d'une commande */
            printf("blanc");
        }
    }
    Ce que je ne comprends pas dans cette énoncé c'est comment savoir quel est le processus qui aura la main en premier, et donc l'ordre d'affichage des couleurs.

    merci d'avance

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    il faut récupérer la valeur de retour de fork. Si c'est 0 t'es dans le processus fils, si c'est > 0 t'es dans le père, si c'est -1 le fork a merdé.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Il y a un exemple d'utilisation ici (c'est google qui me l'a dit ):
    http://www.linux-kheops.com/doc/man/...n2/fork.2.html

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nyakooza Voir le message
    Ce que je ne comprends pas dans cette énoncé c'est comment savoir quel est le processus qui aura la main en premier, et donc l'ordre d'affichage des couleurs.

    merci d'avance
    C'est de la programmation parallèle donc les deux processus s'exécutent "en même temps". Impossible de savoir quel processus sera exécuté en premier. C'est l'ordonanceur qui gère ça.
    Mais si tu veux forcer l'ordre alors c'est à toi de le programmer. Plusieurs façons pour ça
    1) tu mets un sleep(1) dans le processus qui doit attendre. Au bout d'1sec il démarrera (donc forcément après l'autre car 1sec c'est très long)

    2) tu mets un pause() dans le processus qui doit attendre. Il se bloquera jusqu'à ce qu'il reçoive un signal que tu peux faire envoyer par un autre (mais faudra aussi que t'aies pris soin de prémunir le processus contre le signal reçu sinon il meurt
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    ". Impossible de savoir quel processus sera exécuté en premier. C'est l'ordonanceur qui gère ça.
    On est dans le forum linux, sous linux, l'ordonnancement en sortie de fork() est déterminé : le fils est exécuté en premier car la plupart du temps un fork est suivi d'un exec() donc les concepteurs du noyau ont pris cette décision.

Discussions similaires

  1. Fork et wait
    Par ugo188 dans le forum Général Python
    Réponses: 24
    Dernier message: 26/01/2010, 14h18
  2. fork() wait() waitpid() et companie
    Par guillaume_60 dans le forum POSIX
    Réponses: 3
    Dernier message: 23/05/2006, 12h03
  3. fork wait
    Par lafracas dans le forum POSIX
    Réponses: 2
    Dernier message: 19/03/2005, 11h57
  4. [débutant][Thread] wait et NotifyAll
    Par norkius dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 14/03/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo