Forum Programmation.java Du Java qui lance un cmd qui lance du Java... Comment killer tout ça?

Posté par  .
Étiquettes : aucune
0
6
avr.
2005
Voici l'idée :

J'ai toute une série de de batches windows, chacun faisant un appel à la même classe Java mais avec des paramètres différents pour le main. Jusque là, je me contentais de les lancer via la ligne de commande, et un ^C suffisait à interrompre les batches et l'exécution des classes Java du même coup.

Afin de rendre le tout un poil plus clair, j'ai créé une classe (qui elle-même sert de base à une GUI) qui me permet de lancer et interrompre ces batches. Le lancement se fait via un bon vieux
Process pr = Runtime.getRuntime().exec(monBatch)
des familles, et les interruptions via le non moins célèbre
pr.destroy();

Un petit coup d'oeil au task manager me confirme bien que 2 processus sont créés au lancement (cmd.exe et java.exe), mais qu'au moment de l'interruption manuelle, seul le cmd est tué, la classe Java continuant son exécution comme si de rien n'était.

J'ai pas mal cherché sur le net, c'est une question assez courante, mais les réponses sont assez directe : c'est pas possible de tuer les processus fils en ne tuant que le père.

Ma question est donc : Y aurait-il un moyen détourné d'avoir accès aux processus fils? Je pensais bien zapper les batches, et appeler directement les classes (il devient donc trivial de les killer), mais c'est pas super flexible, notamment au niveau des classpath, qui sont définis dans les batches pour le moment.

Je suis prêt à faire une refonte de code si nécessaire, car pour le moment je suis vraiment dans l'impasse...

Merci d'avance!
  • # On est où là ?

    Posté par  . Évalué à 5.

    "Démarrer -> Arrêter -> Redémarrer l'ordinateur
    ..
    ..
    ..
    Welcome to Grub (ou Lilo, hein, j'suis pas raciste)
    Windows
    Linux <--
    ..
    ..
    Mon truc bidule chouette en java
    Lancer des process
    Lancer des process
    Lancer des process
    Lancer des process

    kill le_process_qui_va_bien

    " ?

    Es-tu prêt à faire une refonte de l'OS aussi ?

    Bon, ok, je --> []

    Bon, quand même : ce n'est typiquement pas un problème Java ! C'est un pur problème Windows.
    Remplace Java.exe par n'importe quoi d'autre, le comportement est identique !

    Bonne journée

    Christophe
    • [^] # Re: On est où là ?

      Posté par  . Évalué à 1.

      Haha, si ça tenait qu'à moi, ou même à ma boîte, ça poserait pas de problème de passer à Linux. Mais va dire ça à notre client, qui vue sa taille doit faire partie des gros gros comptes de Windows...

      M'en vais faire une fitcheure ricouaiste pour Longhorn, tiens! ;)

      "Il faut" (Ezekiel 18:4) "forniquer" (Corinthiens 6:9, 10) "avec des chiens" (Thessaloniciens 1:6-9) "morts" (Timothée 3:1-10).

  • # re

    Posté par  . Évalué à 1.

    ils font quoi tes scripts?
    parce que si c'est juste passer des parametres au main (un
    java Maclass params
    tout con quoi), tu peux lancer direct la jvm depuis ton code java et ainsi pouvoir la killer simplement.

    Cf la classe Runtime et les differentes methodes exec(), qui te permettent de changer le repertoire de travail et de passer des parametres au process executé.
    • [^] # Re: re

      Posté par  . Évalué à 1.

      En fait, c'est ce que j'ai fini par faire.

      Merci quand même en tout cas!

      "Il faut" (Ezekiel 18:4) "forniquer" (Corinthiens 6:9, 10) "avec des chiens" (Thessaloniciens 1:6-9) "morts" (Timothée 3:1-10).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.