Programmation.java : Du Java qui lance un cmd qui lance du Java... Comment killer tout ça?
Posté par Sixel (page perso, ) le 06 avril 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
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!
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!
> Lire le message (4 commentaires, moyenne: 1,8).
Vous avez demandé le commentaire #558634.



re
ils font quoi tes scripts?
tout con quoi), tu peux lancer direct la jvm depuis ton code java et ainsi pouvoir la killer simplement.parce que si c'est juste passer des parametres au main (un
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
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).