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 :

détection de la fin des processus fils


Sujet :

Linux

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Février 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 191
    Points : 199
    Points
    199
    Par défaut détection de la fin des processus fils
    Salut
    Mon programme crée 5 processus fils.
    Le processus père boucle jusqu'au la fin des 5 processus fils.

    j'ai utilisé un espace mémoire partagé initialisé a 5 (protégé par un sémaphore) et chaque foi un processus fils termine je décrément la variable partagé; et le processus père boucle tanque la variable partagé déférant de zéro.

    Alors je cherche une méthode plus pratique qui détecte la fin des processus fils.
    merci d'avance.

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Sous Unix, tu as wait() et waitpid(), sous linux tu as en plus wait3() et wait4().
    Cordialement.

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Février 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 191
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Sous Unix, tu as wait() et waitpid(), sous linux tu as en plus wait3() et wait4().
    Cordialement.
    Merci ami
    Je pense que la fonction waitpid() c'est la réponse de ma question alors je fait mon possible pour faire la condition d'arrêt sur le processus père a l'aide de cette fonction:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*Pid[i] est un tableau de type pid_t ou chaque case contienne le pid d'un processus i*/
    int End_of_proc()
    {
    int i,nb=0;
    pid_t g;
    for(i=0;i<5;i++){//Pid[i ]variable globale
                         g=waitepid(Pid[i],&statut,WNOHWANG);
                         if(g>0)nb++;
                         }
    if(nb==5)return 1;
    else return 0;
    }
    et pour l'implémentation en processus père
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    while(!End_of_proc()){//je fait mon traitement }
    Alors a se que ma fonction est juste?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    enregistrer une callback avec le signal SICHLD (man 7 signal)

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Février 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 191
    Points : 199
    Points
    199
    Par défaut
    Merci pour votre réponse mais j'ai pas compris vous pouvez explique clairement
    merci

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    si tu fais, dans le pere, un appel a signal(), avec le flag SIGCHLD, avant le fork, tu seras averti de la mort d'un fils... A ce compte-la, il te suffit de decrementer ton compteur... Et quand tu arrives a zero, ben c'est fini...

    Va voir dans les "man pages"... Tape sous ton shell "man 7 signal" (7 pour le septieme volume de la doc), et tu verras comment utiliser...

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Février 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 191
    Points : 199
    Points
    199
    Par défaut Merci mon problème est résolu
    Citation Envoyé par souviron34 Voir le message
    Va voir dans les "man pages"... Tape sous ton shell "man 7 signal" (7 pour le septieme volume de la doc), et tu verras comment utiliser...
    Merci pour les précisions mon problème et résolu et merci pour "man pages" c'est un super tutoriel http://man.developpez.com/man7/signal.7.php

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fin des processus en parallèle
    Par Bonjovi51 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 30/01/2014, 18h27
  2. Popen : lancer des processus fils
    Par roipoussiere dans le forum Général Python
    Réponses: 13
    Dernier message: 18/01/2014, 09h55
  3. Réponses: 2
    Dernier message: 27/05/2008, 12h20
  4. Réponses: 12
    Dernier message: 30/11/2006, 20h42
  5. Attendre la fin des threads fils d'un processus
    Par SteelBox dans le forum Windows
    Réponses: 15
    Dernier message: 24/02/2006, 17h08

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