Communication inter-threads par stdout sous linux
Bonjour à tous,
Je développe actuellement une application linux qui me pose quelques soucis.
En effet, j'essaye de faire communiquer une application java avec un programme en C.
J'essaye pour celà d'utiliser stdout:voici le protocole:
- mon appli C (appelée appliC) est lancée par on programme java (appliJava).
- appliC envoie son pid sur stdout ("pid : XXX") avec un simple printf
- appliJava le récupère (code après)
- applic envoie ensuite des infos sur stdout, également récupérés par appliJava
- le programme C est arrété par l'envoie d'un signal USRSIG2 par appliJava
Mon problème est que cela ne marche pas et me fait planter le pc...
Voici mon code (coté appliJava):
Tout ceci est inclu dans la même classe ...
Code:
1 2 3 4 5 6 7 8 9
| /*Lancement du processus C*/
Runtime runtime=Runtime.getRuntime();
try {
process=runtime.exec(new String[]{"../record/record"});
} catch (IOException e1) {
// TODO Auto-generated catch block
System.err.println("Veuillez r�installer l'outil record");
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| //Création du thread de lecture de flux
Thread t = new Thread (new Runnable() {
public void run() {
/*Recuperation du pid pour destruction*/
BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream()));
String line = "";
try {
while( ((line = reader.readLine()) != null)) {
//Traitement du flux de sortie
if(line.startsWith("pid ")){
pid=line.substring(4);
System.out.println("pid: "+line);
}else{
//autre que pid
....
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
);
t.start();
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
/*Destruction du processus*/
public void destroy() {
if(pid.equals("")) {System.out.println("le pid n'est pas r�cup�r�");return;}
try{
Runtime.getRuntime().exec(new String[]{"kill","-USR2",pid});
} catch (IOException e) {
System.out.println("Erreur lors du kill -USR2 "+pid);
e.printStackTrace();
}
System.out.println("Fin du Recorder");
} |
Mon principal soucis est que je ne recoit aucun message (pid) sur stdout de mon appli java...
Et le programme record marche parfaitement s'il n'est pas lancé.
Merci de m'aider
Modéré par zekey: Suppression de Help Wanted dans le sujet. Ce n'apporte rien a la description du sujet et de plus on demande, on ne veut pas. :-)