Envoyer une interruption à partir d'un programme Java

Envoyer une interruption à partir d'un programme Java - Java - Programmation

Marsh Posté le 26-09-2006 à 10:55:14    

Bonjour
 
J'ai deux programmes : une interface en Java et un programme en C (win32).
L'interface exécute le programme en C et lis les données en sortie jusqu'à ce que l'utilisateur décide d'arrêter.
A ce moment là je dois donc stopper le programme en C qui effectue une boucle infinie. J'ai ajouté au programme C une fonction pour détecter les interruptions, quand il reçoit la bonne interruption il arrête sa boucle et se termine proprement...
 
Mon problème c'est que je ne sais pas comment envoyer l'interruption depuis mon programme en Java, il y a bien "Process.destroy()" mais ce n'est pas propre et parfois le programme en C ne se termine pas, ce qui est très problématique pour la suite... :(
 
Merci pour votre aide :hello:

Reply

Marsh Posté le 26-09-2006 à 10:55:14   

Reply

Marsh Posté le 26-09-2006 à 10:57:28    

t'as qu'à juster fermer le stdin du programme C et ça sera fini si ce programme en est un.

Reply

Marsh Posté le 26-09-2006 à 11:31:22    

même en fermant le stdin/out le programme continu car il ne fait pas que ça...
 
J'ai essayé de faire le code suivant :
 

Code :
  1. OutputStream _out = proc.getOutputStream();
  2. ...
  3. _out.write(new byte[]{(byte)0x03});  // caractère ASCII pour "Ctrl+c" (signal SIGTERM)
  4. _out.flush();
  5. _out.close();


 
mais le programme ne réagit pas...

Reply

Marsh Posté le 26-09-2006 à 12:02:24    

bah le programme en question est pourrave. ça veut dire que si l'entrée standard est fermée (EOF) avec CTRL+D / CTRL+Z bah il va pas le voir et boucler comme un con sur du vide.
 
Remarque : après avoir fermé stdin, il faut que tu lises TOUT ce qu'il y a lire sur stdout/stderr.

Reply

Marsh Posté le 26-09-2006 à 13:31:36    

c'est possible que ce soit un problème de stdin/out. mon programme en C dispose de centaines de processus fils alors ce n'est pas évident de gérer tout ça...

Reply

Sujets relatifs:

Leave a Replay

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