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

Langage Perl Discussion :

Mettre en veille le processus parent


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut Mettre en veille le processus parent
    Bonjour,

    J'ai problème qui devrait être simple à régler. J'ai mon script perl qui doit lancer deux programmes. Le problème est qu'il ne lance les programmes à la suite, alors que je souhaiterais qu'il attende que le premier se termine avant de lancer le second.

    J'ai donc utiliser fork comme le conseil la faq :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $pid;
    defined($pid = fork) or die "Pas de fork possible : $!";
    unless($pid){
        print "StdfLs.exe : \n";
        exec(qq("$execC -t $argC -ls stdf_list.txt C:/Dpvsf/my_result.txt"));
        }
    waitpid($pid,0);
    print "Fin StdfLs.exe, suite du programme..." ;
    Avec ce code la fenêtre se ferme et aucune fichier n'est créé (ce que devrait faire le programme. Je précise que ma ligne exec (system sans fork) fonctionne très bien sans fork.

    Est ce qu'il y a une erreur dans mon code? Est ce qu'il y a une alternative?

    Merci d'avance pour vos réponses.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    J'ai un peu de mal à comprendre: si ton but est que les programmes lancés par ton script soient séquentiels pourquoi utiliser un fork() qui a plutôt pour but le parallélisme ?

    Avec le system ne suffit pas ? (surtout si il marche comme tu le dis):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    print "StdfLs.exe : \n";
    my $RC = system(qq("$execC -t $argC -ls stdf_list.txt C:/Dpvsf/my_result.txt"));
    die ("erreur: $!") if ($RC); # en supposant qu'un RC different de 0 soit une erreur
    print "Fin StdfLs.exe, suite du programme...";
    ...
    # second system()
    ...
    (j'ai repris ton code un peu brutal pour le contenu du qq())

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    Oui, je me suis rendu compte de mon erreur. Effectivement je n'ai pas besoin de fork.

    En fait, je pensais que mon script lançait les deux programmes sans attendre que le premier soit terminé, alors qu'en fait, mon premier programme ne s'exécutait pas pour d'autres raisons.

    Oui, j'ai appris le perl par des tuto recemment, donc ma syntaxe n'est pas forcement la meilleur. Merci pour les conseils.

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

Discussions similaires

  1. Comment mettre en veille prolongée windows avec vc++6
    Par samalive dans le forum Visual C++
    Réponses: 4
    Dernier message: 28/10/2007, 22h20
  2. Réponses: 2
    Dernier message: 09/02/2007, 18h47
  3. Réponses: 14
    Dernier message: 24/04/2006, 08h36
  4. [Windows XP]Problème option "mettre en veille" dé
    Par irnbru dans le forum Windows XP
    Réponses: 3
    Dernier message: 23/11/2005, 22h36

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