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

Concurrence et multi-thread Java Discussion :

[Process]Execution de process dans un thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Process]Execution de process dans un thread
    Bonjour à tous. Je suis sur un problème depuis quelques temps et ne vois pas trop comment m'en sortir. J'exécute trois commandes UNIX dans un thread. Le thread sert juste à désynchroniser ma page courante de l'execution des commandes UNIX ( celles-ci peuvent être longues et je ne veux pas bloquer l'utilisateur ).

    Dans le thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        // Commande 1 sur marchine UNIX
        Runtime env = Runtime.getRuntime();
        Process process = env.exec("rsh ......");
        process.waitFor();
     
        // Commande 2 sur marchine UNIX
        Runtime env = Runtime.getRuntime();
        Process process = env.exec("rcp fic1");
        process.waitFor();
     
        // Commande 3 sur marchine UNIX
        Runtime env = Runtime.getRuntime();
        Process process = env.exec("rcp fic2");
        process.waitFor();
    Le rsh génère 2 fichiers que je récupère par les rcp.

    Problème : Les 3 commandes marchent, c'est leur enchainement qui ne marche pas.

    Je m'explique : Le premier "rcp" ne fait rien alors que le second marche. Si je double les rcp je vois qu'effectivement il y en a un sur deux qui marche. C'est comme si il était nécessaire de faire une sorte de "flush()" entre chaque exec pour "libérer quelque chose".

    Avez-vous déjà rencontré ce genre de problème.

    Merci




    [Modéré par Didier]
    Ajout de tag dans le titre
    Ajout de balises code
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    déja pense a fermer les handlers de redirections de tes process
    c'est toujours mieux

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
      // Commande 1 sur marchine UNIX 
     {
        Runtime env = Runtime.getRuntime(); 
        Process process = env.exec("rsh ......"); 
        process.getOutputStream().close();
        process.waitFor(); 
        process.getInputStream().close();
        process.getErrorStream().close();
     }
     
      // Commande 2 sur marchine UNIX 
     {
        Runtime env = Runtime.getRuntime(); 
        Process process = env.exec("rcp fic1"); 
        process.getOutputStream().close();
        process.waitFor(); 
        process.getInputStream().close();
        process.getErrorStream().close();
     }
     
      // Commande 3 sur marchine UNIX 
     {
        Runtime env = Runtime.getRuntime(); 
        Process process = env.exec("rcp fic2"); 
        process.getOutputStream().close();
        process.waitFor(); 
        process.getInputStream().close();
        process.getErrorStream().close();
     }
    Ensuite si les commandes ecrivent bcp de choses sur leurs stderr ou stdout, tu vas devoir vider les buffers de redirection sans quoi le process va s'interrompre et attendre que tu les vides.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci,

    Super ça marche je n'ai même pas eu à les vider stderr et stdout

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Comment fait on pour vider les buffers de redirections en java? ca m'interesse car j'ai ce probleme justement!

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          Runtime env = Runtime.getRuntime();
          Process process = env.exec(commande);
          process.waitFor();
          BufferedReader stdout = new BufferedReader ( new InputStreamReader ( process.getInputStream() ) );
          if ( stdout.ready() ) System.out.println( "stdout : "+stdout.readLine() );
          BufferedReader stderr = new BufferedReader ( new InputStreamReader ( process.getErrorStream() ) );
          if ( stderr.ready() ) System.out.println( "stderr : "+stderr.readLine() );
    Testé.

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    merci beaucoup

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

Discussions similaires

  1. [Process] Lancer programme externe dans form
    Par goddet dans le forum C#
    Réponses: 24
    Dernier message: 11/12/2019, 13h32
  2. Executer le traitement dans un thread ou BackgroundWorker
    Par skunkies dans le forum Windows Forms
    Réponses: 13
    Dernier message: 28/05/2009, 23h41
  3. [1.1] Executer un process sur un serveur distant
    Par maitrebn dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 27/02/2007, 18h02
  4. [API WIN32] Savoir si le process a été lancé dans une console
    Par QuantuX dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/06/2006, 16h00
  5. Problème d'execution de code dans un thread
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2006, 13h49

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