我正在尝试使用Linux/Bluez工具:hcitool从QT进行BLE扫描。

我使用以下方法打开该过程:

QString program = "sudo stdbuf -oL hcitool -i hci0 lescan";
hcitool = new QProcess();

connect(hcitool, SIGNAL(started()), this, SLOT(hcitool_started()));
connect(hcitool, SIGNAL(finished(int)), this, SLOT(hcitool_finished(int)));
connect(this, SIGNAL(kill_hcitool()), hcitool, SLOT(kill()));
connect(this, SIGNAL(terminate_hcitool()), hcitool, SLOT(terminate()));

hcitool->start(program, QProcess::Unbuffered | QProcess::ReadWrite);

然后,我继续从过程中读取以存储所有结果:
QString result = hcitool->readLine();

几秒钟后,我想停止hcitool进程,这是出问题的地方。我已经尝试了终止信号,终止信号,将^ C写入进程,但是没有任何效果。

实际上,kill信号完成了该过程。但不是很好,因为之后我的hci0被搁置了,并且在用以下命令重置hci0之前,我无法再次启动hcitool:
hciconfig hci0 down
hciconfig hci0 up

那么关于如何终止此过程的任何想法对吗?

最佳答案

(从评论移开)

通常有效的技巧是对流进行close(),这应该为子进程提供SIGHUP或SIGPIPE,通常可以更优雅地对其进行处理。

关于linux - 无法终止在Linux上运行hcitool的QProcess?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40703165/

10-12 21:22