使用ProcessBuilder

时间:2016-03-24 09:03:25

标签: java linux bash bluetooth processbuilder

我在树莓中有一个java应用程序,我必须控制一个usb蓝牙低功耗(BLE)加密狗。我想在一定时间内扫描设备。在一个shell中我会叫'sudo hcitool lescan --continuous'并按ctrl-c中止扫描。

现在在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输出的Process的InputStream。但是怎么停止扫描?将0x03写入OutputStream将不起作用,因为ctrl-c不仅仅是值0x03,而且据我所知也是一个特殊信号SIGINT。

那我怎么能这样做?是否有可能停止扫描我开始的方式或者我必须选择其他方式?

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣,我目前的解决方案如下(我对此并不满意,但没有时间在这个问题上工作更长时间):

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

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

然后我从java执行它。