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

Applets Java Discussion :

Tuer un processus en cours


Sujet :

Applets Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Tuer un processus en cours
    Bonjour à tous,

    Mon applet, après avoir téléchargé un exécutable chez le client, lance l'exécution de cet exécutable à l'aide des commandes suivantes :

    Windows :
    C:\chemin\absolu\vers\executable.exe

    Mac et Linux :
    /chemin/absolu/vers/executable

    (valeurs de executable.getAbsolutePath() - cf. code ci-dessous)

    Version simplifiée du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Process pipeProcess;
     
    List<String> commandList = new ArrayList<String>();
    commandList.add(executable.getAbsolutePath());
     
    ProcessBuilder processBuilder = new ProcessBuilder(commandList);
    pipeProcess = processBuilder.start();
    Ce que j'aimerais : pouvoir stopper le processus (équivalent d'une commande Unix kill) si le programme n'est pas totalement lancé au bout d'un certain temps. La manière de détecter si le programme est totalement lancé ou pas, ainsi que le délai : ça n'est pas un problème. Ce que je voudrais savoir, c'est s'il existe en Java un moyen d'arrêter le processus qu'on vient de lancer ?

    Merci.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    Bonjour,

    Oui c'est possible,
    Ferme bien l'entrée la sortie standard du process et utilise la méthode destroy dessus.

    Mais bon sous Windows, la documentation java précise bien que ça ne marche pas toujours, tout dépend ce que fait ton process.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Jimmy, merci pour ta réponse.

    Pourrais-tu détailler ce que tu entends par bien fermer l'entrée et la sortie standard du process ?

    Dans mon cas, l'objet pipeProcess est notamment utilisé pour ouvrir un pipe et communiquer avec le programme que l'applet lance :

    (suite du code de mon précédent message)

    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
     
     
    Writer pipeWriter = new OutputStreamWriter(pipeProcess.getOutputStream());
    pipeWriter.append("<communication>Hello!</communication>");
    pipeWriter.flush()
     
    BufferedReader reader = new BufferedReader(new InputStreamReader(pipeProcess.getInputStream()));
     
    // attendre 20s que l'executable se lance
    // quand l'executable se lance, il envoie un message a l'applet
    // et le reader devient ready
    long t0, t1;
    t0 =  System.currentTimeMillis();
    t1 = t0;
    while( !reader.ready() && (t1-t0)<20000 ) {
        t1 =  System.currentTimeMillis();
    }
    // si les 20s sont atteintes ET que l'executable N'est PAS lance
    // alors kill son processus :
    if(!reader.ready()) {
        // [ L'OBJET DE MA DEMANDE SUR CE FORUM ]
    }
    // si l'executable est lance avant 20,001s
    // alors lire son message :
    else {
        String responseLine = reader.readLine();
        // etc...
    }

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    Si pipeProcess est bien ton objet Process, tu dois faire un close sur l'InputStream et l'OutputStream associé.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ça fonctionne nickel, merci.

    Solution, donc : remplacer dans le code précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // [ L'OBJET DE MA DEMANDE SUR CE FORUM ]
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pipeProcess.getInputStream().close();
    pipeProcess.getOutputStream().close();
    pipeProcess.destroy();

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    J'adore quand un plan se déroule sans accro

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

Discussions similaires

  1. Tuer le processus de l'appli en cours
    Par chtiot dans le forum Langage
    Réponses: 3
    Dernier message: 23/02/2008, 18h37
  2. Comment tuer le processus ez-ipupdate
    Par berry dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 21/06/2004, 15h07
  3. Tuer le processus d'Interbase ?
    Par JezabelleTwin dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/04/2004, 13h09
  4. [Systeme] Processus en cours d'éxécution
    Par adiGuba dans le forum POSIX
    Réponses: 13
    Dernier message: 16/02/2003, 16h09
  5. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47

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