Comment tuer un processus - Java - Programmation
Marsh Posté le 26-08-2004 à 01:11:34
marche pas, mais encore?
c'est quoi le process en question ?
Marsh Posté le 26-08-2004 à 01:14:07
un processus quelconque, ça ne marche avec aucun que j'ai essayé ("explorer" notamment)
Marsh Posté le 26-08-2004 à 01:31:08
j'ai essayé avec "cmd" et "firefox" avec "iexplore" j'arrive même pas à le lancer (si tu comment le lancer ca m'interesse).
Sinon j'ai une solution c'est récupérer le pid du programme lancé mais est-ce qu'il y a moyen ?
Marsh Posté le 26-08-2004 à 09:58:40
La gestion des process est plus que rudimentaire en Java. Oublie tout ce que tu as pu connaitre en C.
Je viens d'essayer ton exemple avec "notepad" et ça marche. Quel JDK utilises-tu ?
De manière générale, la création / gestion des process est à fuir comme la peste en Java. Je parle de pure expérience.
Certains programmes démarrés via exec() ne pourront tourner qui si tu "suces" leur error stream et leur output stream (sans quoi ils resteront figés), ce qui t'oblige à démarrer deux threads à cet effet.
Si tu as le malheur d'invoquer un "batch", qui lui-même lance un programme, tu ne feras que comprendre ta douleur.
Enfin, pour encore plus illustrer le manque de robustesse de cette gestion, je me souviens de différences notoires entre JDK 1.3 et 1.4 quant au code de retour des progs ainsi appelés (l'un des deux donnait généralement une valeur abbérante).
L'API elle-même ne brille d'ailleurs que par sa pauvreté.
Marsh Posté le 28-08-2004 à 16:00:20
îl vaut mieux alors faire une programme C qui gère ça en externe et l'appeler par JNI ?
Marsh Posté le 28-08-2004 à 18:38:32
deltaden a écrit : îl vaut mieux alors faire une programme C qui gère ça en externe et l'appeler par JNI ? |
J'irais pas forcément jusque là.
Si tu ne peux pas faire autrement que de passer par des processus, ET si tu peux t'en sortir avec le peu d'API Java, ET que tu le fait en parfaite connaissance de cause, ma foi, ça ira.
Si tu as des besoins plus spécifiques, je n'ai jamais essayé ta solution, mais ça sent le can of worms.
Ceci dit, ton exemple DEVRAIT marcher. Si pratiquement, il ne te faut rien de plus que exec() et destroy(), j'essayerais de voir pq ça ne marche pas, de régler ça et de pouvoir l'utiliser. Mais je vois pas, comme ça, pq ça marche pas.
Marsh Posté le 26-08-2004 à 00:40:54
J'ai lancé un processus externe mais je n'arrive pas à le tuer à l'aide de la commande "destroy". Comment le faire ?
Voici mon code (l'application a été changer pour la lisibilité)
il y a des "try/catch" en plus que j'ai pas mis pour la lisibilité toujours