无法在 linux 上终止 QProcess 运行 hcitool?

Cant terminate QProcess running hcitool on linux?

我正在尝试使用 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 进程,这就是问题所在。我试过终止信号、kill 信号、将 ^C 写入进程,但没有任何效果。

实际上kill信号结束了进程。但不是很好,因为之后我的 hci0 被阻止了,在 hci0 被重置之前我无法再次启动 hcitool:

hciconfig hci0 down
hciconfig hci0 up

关于如何正确终止此进程有什么想法吗?

(从评论中移出)

一个通常有效的技巧是 close() 流,它应该给子进程一个 SIGHUP 或 SIGPIPE,通常处理得更优雅。