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

C Discussion :

Retour d'erreur de programme en arrière plan


Sujet :

C

  1. #1
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut Retour d'erreur de programme en arrière plan
    Bonjour,

    Je poste ici après avoir un peu erré sur le net à la recherche d'une solution. En espérant que vous m'aidiez à trouver une approche pour gérer ce problème.

    Je reprends du code existant ou un fichier parent.pc exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (iCpt = 0 ;  iCpt < iNbSousFic ; iCpt++) {
      ...
      sprintf(commande,"fils.exe %s &",pchNomSousRepTrav);
      retourErreur = system(commande);
     ...
    }
    Le problème étant que lorsque le programme fils renvoie une erreur, logiquement celle-ci est étouffée puisque ce programme tourne en arrière plan. J'ai donc besoin d'avoir le retour d'erreur de ce programme tout en le laissant en arrière plan.

    Je me suis renseigné sur la possibilité de récupérer le PID de ce programme via la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retourPID = system("$!");
    Mais cette valeur reste à 0. De plus, je n'ai aucune certitude sur la possibilité de retrouver le code d'erreur du programme fils grâce à ce PID.

    Est-ce que j'ai bien abordé le sujet ? Est-ce que vous avez une solution (magique) à me proposer ?
    Merci d'avance.

    PS : Etant donné que ce sont des fichiers pro*c mais que la syntaxe est du C, j'ai décidé de poster ce topic ici.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Une solution est de créer un thread dédié à une exécution de la commande.
    Ce qui permet de faire tourner le process en background sans empêcher le programme appelant de continuer à travailler.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Dans ton cas tu ne peux pas utiliser system(). Il faut que tu fasses l'exécution à la main avec fork() et execv(), et récupérer le status de la commande dans le père avec un wait().

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Merci de vos réponses (et en plus de votre rapidité).

    Sur ces conseils, j'ai découvert cet exemple qui traduit bien le problème je pense : http://www.cs.ecu.edu/karl/4630/spr01/example1.html

    Je vais essayer ceci et je reviendrais mettre à jour le topic en fonction de ma réussite.

    EDIT : Problème qui implique une trop grosse refonte donc abandonné, je mets tout de même en résolu.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

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

Discussions similaires

  1. Lancer programme en arrière plan
    Par jostyle94 dans le forum Général Java
    Réponses: 2
    Dernier message: 17/06/2015, 09h32
  2. Programme en arrière plan
    Par fred1599 dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 04/02/2014, 12h51
  3. comment lancer un programme en arrière plan
    Par metalica25 dans le forum Windows
    Réponses: 9
    Dernier message: 03/03/2013, 17h19
  4. problème erreur s'affiche en arrière plan
    Par erylis dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/06/2009, 10h31
  5. Comment mettre un programme en arrière plan?
    Par boucané dans le forum Windows XP
    Réponses: 2
    Dernier message: 06/09/2007, 19h07

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