Interrompre un process lancé par un thread

Interrompre un process lancé par un thread - Java - Programmation

Marsh Posté le 31-10-2008 à 12:49:18    

Bonjour,
 
En java, à partir de mon appli, je lance un traitement via un thread qui lui-même appelle un script shell. Au bout d'un certain temps, je voudrais que l'utilisateur puisse interrompre le traitement s'il dure trop longtemps.  
 
Sur demande de l'utilisateur, je fais donc un Thread.interrupt(); - l'interruption est catchée au niveau du thread qui lance le process (myRuntime.exec( myCommande )).  
Dans le catch je fais un process.destroy(); Le problème c'est que toute l'appli se ferme alors que c'est le bon process que je détruis (et juste ce process que je voudrais tuer).
 
Je ne suis pas sûr d'utiliser la bonne méthode... quelqu'un aurait-il une piste ??
 
Merci,

Reply

Marsh Posté le 31-10-2008 à 12:49:18   

Reply

Marsh Posté le 31-10-2008 à 13:31:09    

Et si tu essayes sans process, en remplaçant la création du process par l'affichage d'un message; idem pour le destroy?
 
Histoire de valider l'utilisation que tu fais des threads et de Thread#interrupt()...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 31-10-2008 à 14:22:31    

Le fonctionnement du thread est OK. Quand je retire le process.destroy, l'interruption fonctionne correctement. Le problème se situe précisément au niveau du destroy(). Peut-être faut-il appelée une méthode particuluère avant de faire un destroy ??

Reply

Marsh Posté le 31-10-2008 à 14:37:53    

mais euh... je vais peut-être dire une connerie, mais une fois que ton thread est arrété, pourquoi tu le laisses pas là où il est ?
 
une fois qu'il ne sera plus référencé par personne, il partira dans le GC est pis c'est tout. Non ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 31-10-2008 à 14:56:25    

le process (script sh) continue à tourner en arrière plan même si la main est revenu à l'utilisateur... le but c'est d'arrêter tout traitement lancé par le thread (en l'occurence le script sh).

Reply

Marsh Posté le 31-10-2008 à 15:02:15    

ha pardon, j'avais pas saisi le fait que tu lançais vraiment un processus derrière tout ça.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 01-11-2008 à 22:24:31    

Un bout de code pour reproduire ça (en réduisant le code au strict minimum, please)?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 03-11-2008 à 18:06:06    

bonne idée que celle de réduire le code au strict minimum... ça m'a permis de voir que le problème venait du shebang dans le script shell -> j'ai remplacé #!/bin/ksh par #!/bin/sh et l'interruption fonctionne correctement maintenant... :-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed