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
    Membre éprouvé
    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
    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 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
    Sous Unix, tu as wait() et waitpid(), sous linux tu as en plus wait3() et wait4().
    Cordialement.

  3. #3
    Membre éprouvé
    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
    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 confirmé

    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
    Billets dans le blog
    2
    Par défaut
    enregistrer une callback avec le signal SICHLD (man 7 signal)

  5. #5
    Membre éprouvé
    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
    Par défaut
    Merci pour votre réponse mais j'ai pas compris vous pouvez explique clairement
    merci

  6. #6
    Expert confirmé

    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
    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
    Membre éprouvé
    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
    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, 17h27
  2. Popen : lancer des processus fils
    Par roipoussiere dans le forum Général Python
    Réponses: 13
    Dernier message: 18/01/2014, 08h55
  3. Réponses: 2
    Dernier message: 27/05/2008, 11h20
  4. Réponses: 12
    Dernier message: 30/11/2006, 19h42
  5. Attendre la fin des threads fils d'un processus
    Par SteelBox dans le forum Windows
    Réponses: 15
    Dernier message: 24/02/2006, 16h08

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