2016-03-24 2 views
1

私は、USBブラズラ低エネルギー(BLE)ドングルを制御しなければならないラズベリーにJavaアプリケーションを持っています。私は特定の時間以上のデバイスをスキャンしたい。シェルでは、 'sudo hcitool lescan --continuous'と呼んでctrl-cを押してスキャンを中止します。ProcessBuilderでJavaからのラズベリーのBLEドングルのスキャンを停止します

は今、Javaで私はbashのを開始するためにProcessBuilderをを使用してOutputStreamに上記のコマンドを書き込みます。

ProcessBuilder builder = new ProcessBuilder("/bin/bash"); 
Process proc = builder.redirectOutput(Redirect.PIPE).start(); 
OutputStream stdin = proc.getOutputStream(); 
String command= "sudo hcitool lescan --continuous\n"; 
stdin.write(script.getBytes()); 

これは動作しますが、私はhcitoolの出力がリダイレクトされているプロセスのInputStreamを取得することができます。しかし、どのようにスキャンを停止する? ctrl-cは値0x03だけでなく、私が知る限り特別なシグナルSIGINTであるため、OutputStreamに0x03を書き込むことはできません。

どうすればいいですか?私がそれを始めた方法をスキャンするのを止めることは可能ですか、それとも別の方法を選択する必要がありますか?

+0

私も同様の問題があります。あなたは解決策を見つけましたか? – user2722077

+0

@ user2722077適切なものではありませんが、少なくともこの場合私のために働いていたものは1つです。質問に対する私の答えを見てください。 – Semaphor

答えて

0

誰かが興味を持っている場合は、私の現在のソリューションは、(私はそれで本当に満足していないんだけど、何時間という問題に長く取り組んではありませんでした)以下の通りです:

私は、プロセスを殺すbashスクリプトを作成します:

#!/bin/sh 
VAR=$(ps -a | grep hcitool | awk {'print $1'}) 
sudo kill -int $VAR 

次にJavaから実行します。

関連する問題