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 Christophe Chailloleau-Leclerc . Évalué à 5.
..
..
..
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 Sixel . Évalué à 1.
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 kra . Évalué à 1.
parce que si c'est juste passer des parametres au main (un 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 Sixel . Évalué à 1.
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.