2016-03-24 31 views
1

我在树莓中有一个Java应用程序,在该树莓中我必须控制USB低功耗蓝牙(BLE)加密狗。我想在特定时间扫描设备。在一个shell中,我打电话给'sudo hcitool lescan --continuous',然后按ctrl-c中止扫描。停止使用ProcessBuilder扫描来自Java的树莓中的BLE加密狗

现在在java中我使用的ProcessBuilder启动bash和写入以上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的。但如何停止扫描?就我所知,将0x03写入OutputStream将不起作用,因为ctrl-c不仅仅是值0x03,而且还是一个特殊的信号SIGINT。

那么我怎么能做到这一点?是否有可能停止扫描我开始的方式,还是必须选择其他方式?

+0

我有类似的问题。你有没有找到解决方案? – user2722077

+0

@ user2722077不是一个适当的,但至少有一个在我的情况下工作。看到我对这个问题的回答。 – Semaphor

回答

0

如果有人有兴趣,我目前的解决方案是下面的(我不与它真的很高兴,但没有时间上的问题加长工作时间):

我创建一个bash脚本杀死进程:

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

然后我从java执行它。