【问题标题】:Stop scanning of BLE dongle in raspberry from Java with ProcessBuilder使用 ProcessBuilder 停止从 Java 中扫描覆盆子中的 BLE 加密狗
【发布时间】: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


【解决方案1】:

如果有人感兴趣,我目前的解决方案如下(我对此不太满意,但没有时间再解决这个问题了):

我创建了一个终止进程的 bash 脚本:

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

然后我从java中执行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多