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

API standards et tierces Java Discussion :

[Process] comment savoir si exec est termine


Sujet :

API standards et tierces Java

  1. #1
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut [Process] comment savoir si exec est termine
    j ai un petit probleme pour savoir si mon exec d'un programme externe est terminee :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Process proc=Runtime.getRuntime().exec("$REP/nmap -O 164.131.87.10 -oX testjava.xml");
    proc.getOutputStream().close(); 
    proc.waitFor();
    je veux executer un programme qui s appelle nmap (logiciel supervision reseau)
    et donc attendre que l execution soit terminer pour toucher au document testjava.xml generer par l application
    le probleme est que l executable java ne s'arrete jamais et bloque sur proc.waitFor() alors que si j enleve proc.waitFor() le programme arrive bien a finir.

    vu que la methode waitFor() est abstract faut il que je la definisse dans une classe fille de Process ?
    ou y a t il une autre solution pour savoir si "exec" est terminee ???
    merci d avance

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tu n'as pas à redéfinir waitFor() (d'ailleurs tu ne pourrais pas le faire sans code natif). Elle n'est pas abstraite car l'intance du Process retourné par Runtime.exec() implémente déjà waitFor() (sinon tu ne pourrais pas l'utiliser...)

    Lorsque tu tapes cette commande dans une console qu'est-ce que tu obtiens ?


    Je pense que nmap doit attendre quelquechose (une saisie utilisateur, ou que son buffer stdout soit vidé et donc lut par ton appli...).
    Du coups tu te retrouve avec 2 process (ton appli et nmap) qui s'attendent l'une l'autre...

    a++

  3. #3
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    apparemment en faisant une recherche sur google, si on bloque sur waitFor c est du a un probleme de tampon sature
    Vu qu il y a 2 processuc (proc du main et le proc de l exec) ils remplissent les tampons
    si quelqu un peut mieux expliquer et me donner une solutions facile ca serait cool

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    tiens un lien qui pourra peut etre t'aider
    http://www.rgagnon.com/javadetails/java-0014.html

  5. #5
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    ouai je vais look
    j ai trouver celui la aussi qui est pas mal
    http://www.javaworld.com/javaworld/j...229-traps.html

  6. #6
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par tripop1
    tiens un lien qui pourra peut etre t'aider
    http://www.rgagnon.com/javadetails/java-0014.html
    j ai teste t as solution et elle marche
    plsu simple que mon lien
    il suufit juste que j enleve le println dans la boucle while et c good
    thks

  7. #7
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    oui donc la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Process p = Runtime.getRuntime().exec("$REP/nmap -O -oX xml/"+IP+".xml "+IP+"");
    	     BufferedReader input = 
    	       new BufferedReader
    	         (new InputStreamReader(p.getInputStream()));
    	     while ((line = input.readLine()) != null) {
    	       //System.out.println(line);
    	       }
    	     input.close();
    	     //on verifie que le processus p a fini d excuter la commande nmap
    	     p.waitFor();
    	     //traitement du fichier xml
    donc le probleme venait que je ne vidais jamais le tampon avec un bufferReader et que à un moment donnee le waitFor + l exec surchageaient trop et le tampon etait plein donc bloque.

    voila donc merci pour le lien encore

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

Discussions similaires

  1. getRuntime.exec savoir si c'est terminer (process has not exited)
    Par elekis dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 25/01/2010, 10h21
  2. [Process] Comment savoir quelle application est ouverte ?
    Par samus535 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 25/08/2006, 15h01
  3. Réponses: 2
    Dernier message: 24/03/2005, 15h48
  4. comment savoir quel menu est en surbrillance?
    Par LRobi dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2005, 09h04
  5. [C#] Comment savoir si on est logué ou pas?
    Par pc152 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/05/2004, 09h47

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