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 Java Discussion :

tuer un programme lancé par un exec


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut tuer un programme lancé par un exec
    bonjour a tous,
    je voudrai savoir comment faire pour tué un programme lancé par un exec.

    voila le code du lancement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Runtime r = Runtime.getRuntime();
     
    				try {
    					//lancement du test avec un fichier en parametre;)
    					r.exec("cmd /c start ./test/linpack_xeon32.exe ./test/linpack_xeon32.txt" );
    					//System.out.println(r.getRuntime()) ;
    comme vous pouvez le voir, j'ai essayé de recuper l'objet crée par le runtime pour faire un exit dessus, mais, pas moyen, je n'y arrive pas.....



    donc, si vous pouviez m'aider....

    merci d'avance

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    Ce n'est pas possible car tu lances l'application via "cmd /c start ...".

    Tu lances donc "cmd" qui lances via "start" un nouveau programme. Le processus que tu récupère corespond au cmd et pas à ton application. Si tu essaie de tuer cmd (qui d'ailleurs doit, il me semble se terminer tout seul dès que le "start" a commencé) tu ne tueras pas l'application que le "start" a démarré.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    d'accord, donc, comment faire pour le lancé, et que je puisse, le tué ensuite ???

    (merci pour ton aide)

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    Y a il une raison particulière pour que tu passes par "cmd /c start ..."? Normalement il devrait te suffire de passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process process=r.exec(new String[]{"./test/linpack_xeon32.exe", "./test/linpack_xeon32.txt"} )
    Ainsi tu pourras normalement le tuer par process.destroy();

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    merci, non, je suis passer par la, mais juste car, c'est le seul moyen que j'ai réussi a utilisé

    lors, j'ai tappé ceci (avec process en variable privé, car elle est stoppé dans une autre methode)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    process=r.exec(new String[]{"./test/linpack_xeon32.exe", "./test/linpack_xeon32.txt"} );
    en fait, cette ligne est activé aprés un appuis sur un JButton de mon IHM.
    lorsque j'execute cette ligne ,le nouveau proccess et crée.....
    mais, le soft appeler ne se lance pas. il ce lance une fois mon IHM quitté......


    s'aurai tu d'ou viens le probleme ?

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    as-tu bien pensé à gérer les output et inputstream de ce process?

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    c'est a dire ?
    je n'ai jamais fait ça en tout cas.
    c'est la premier fois que je fais sa, donc, je suis un peut en aveugle

    enfait, j'ai l'impression que l'appelé reste en arreier plan pendant que mon IHM tourne.

  8. #8
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    Il s'agit en effet probablement d'un problèmes de flux standards. Il faudrait que tu les fermes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proccess.getInputStream().close();
    proccess.getErrorStream().close()
    .
    Ou tu peux également les lire si leur contenu t'intéresse.

    Pour les explications:
    http://www.developpez.net/forums/d73...t/#post4246147

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    ok, d'accord, merci pour vos explication
    en fait, l'application attendait que la JVM utilise les flux qui sont envoiyé par mon application interne, et comme je ne les utilise pas, le programme ce bloquais.
    je n'avais pas l'impresion, a cause des différente thread que gere le programme....

    je vous remercie

    par contre, comment savoir si mon appli est fermé?

    j'utilise un exitValue() que je test ?

    en fait, il faut que mon programme ce relance, si un temps prédefinie n'est pas atteint.donc, je pensai faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int valexit;
    while(valexit!=-1){  /*-1 ou autre, je ne sais pas encore la valeur de sortie normal*/
    process = r.exec(new String[] {"./test/linpack_xeon32.exe","./test/linpack_xeon32.txt" });
    						process.getInputStream().close();
    						process.getErrorStream().close();
                            valexit=process.exitValue();
                            /*ici je voudrai trouver quelque chose qui bloc l'execution du thread qui lance cette application tant que le programme appeler n'est pas terminé*/
    }
    que pensé vous de mon code? avez vous une idée de comment faire l'attente du thread?

    je vous remercie pour l'aide que vous me fournissez

    edit: je doit pouvoir le faire avec un waitfor() ?

  11. #11
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    En effet waitFor() est exactement ce que tu cherches.

    Pour les valeurs de sortie, la convention veut que les programmes retournent 0 si tout c'est bien passé et un code d'erreur sinon.

  12. #12
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    ok, pas de probleme, je test ça, et je vous tiens au courant rapidement

    edit: sa marche nickel, merci

    par contre, petite question rapide, comment mettre des thread en attente, et pouvoir les "reveiller" quand on veux??

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

Discussions similaires

  1. [XL-2003] Tuer Process ADOBE lancé par Excel (VBA)
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/08/2012, 12h59
  2. Tuer un processus lancé par un script
    Par lyly_lt dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 28/12/2010, 11h46
  3. Réponses: 2
    Dernier message: 07/11/2008, 02h37
  4. Tuer un processus lance par system sous perl
    Par gedeon555 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 17h11
  5. [Runtime] Detruire un process lancé par exec()
    Par Sebounet19 dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 04/10/2005, 09h17

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