【发布时间】:2016-03-24 09:03:25
【问题描述】:
我在覆盆子中有一个 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。
那么我该怎么做呢?是否可以按照我开始扫描的方式停止扫描,还是必须选择其他方式?
【问题讨论】:
-
我也有类似的问题。你找到解决办法了吗?
-
@user2722077 不是一个合适的,但至少在这种情况下对我有用。请参阅我对问题的回答。
标签: java linux bash bluetooth processbuilder