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

Unix Discussion :

Stopper processus principal si au moins un fils plante


Sujet :

Unix

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut Stopper processus principal si au moins un fils plante
    Bonjour,

    j'ai un script principal qui lance des sous scripts (processus fils). Je voudrais que quand au moins un des processus fils plantent, tous les autres déjà lancés se terminent et le script principal capte la ou les erreurs et se stop.

    Actuellement j'ai un wait dans mon code et le script principal continue une fois tous les processus fils terminés indépendamment de l'état.

    Merci pour votre aide.

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Le premier point est de savoir comment déterminer qu'un fils est planté
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut
    Je vois 2 cas, une erreur gérée et un plantage de code.

  4. #4
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ça d'accord mais il faut établir une communication entre les fils et le processus parent, afin que le fils lorsqu'il rencontre une erreur puisse en informer son parent et que celui-ci ferme les autres fils.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut
    Justement je ne veux pas que les autres fils se terminent. J'ai 4 processus en parallèle, si au moins un plante les autres se terminent quand même et le script principal s'arrête.

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Heu je n'ai pas bien compris ton besoin de départ....

    En gros tu veux juste récupérer l'état de chaque fils lorsqu'ils se terminent ?

    Dans ce cas tu peux travailler avec des valeurs de retour en fin de chaque process pour connaitre l'état final.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut
    Je boucle sur une liste de traitements (n traitements) que je lance en parallèle par groupe de 5. Dès que j'ai 5 processus fils lancés je fais un wait dans ma boucle avant de lancer les 5 suivants et ainsi de suite.

    Je souhaite, au moment de mon wait, vérifier si au moins un des 5 processus s'est terminé en erreur (géré ou non) et dans ce cas sortir de ma boucle et stopper mon programme. Si un des 5 processus plante et que les 4 autres tournent encore je veux attendre que les 4 autres se terminent avant de sortir de ma boucle.


    WAIT global de mes 5 pid fils même si un plante les autres se terminent
    Contrôle global des 5 retours et si au moins un des 5 a planté je sors

  8. #8
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Dans ce cas en effet, valeur de retour des process.
    Genre le classique 0 si tout va bien puis des codes erreurs ensuite pour les différents problèmes.

    Pour les erreurs non gérées il faut au moins une exception global qui permettra de renvoyer un code erreur générique.

    Tu n'as plus ensuite qu'a regarder les codes erreurs des 5 process, si au moins 1 n'est pas à 0 alors tu break.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut
    Je n'ai pas réussi avec les codes retours...

    Ma solution qui fonctionne :
    j'ai crée un fichier vide global et si un processus fils plante il va écrire dedans. Après le wait je vais regarder le fichier et si il y a quelque chose dedans je fais un break de ma boucle et j'affiche les informations du plantage que j'ai stockées dans ce fichier.

Discussions similaires

  1. Faire tourner un sous VI sans stopper le principal
    Par felben dans le forum LabVIEW
    Réponses: 2
    Dernier message: 02/07/2007, 09h29
  2. terminaison du processus fils
    Par zahira dans le forum POSIX
    Réponses: 3
    Dernier message: 08/04/2006, 14h35
  3. Attendre la fin des threads fils d'un processus
    Par SteelBox dans le forum Windows
    Réponses: 15
    Dernier message: 24/02/2006, 17h08
  4. Partage d'une variable entre les processus fils
    Par Mehdi Feki dans le forum Linux
    Réponses: 7
    Dernier message: 09/01/2005, 14h34
  5. Stopper plein de processus
    Par tomsoyer dans le forum Linux
    Réponses: 1
    Dernier message: 30/11/2004, 20h16

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