2
我正在嘗試使用Linux/Bluez工具:hcitool,從QT進行BLE掃描。無法終止在Linux上運行hCitool的QProcess?
我使用以下方法來打開進程:
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是抱了起來,我不能再次啓動hcitool前hci0已經與重置一個好辦法:
hciconfig hci0 down
hciconfig hci0 up
所以任何想法如何我可以終止這個過程嗎?
如果控制檯的Ctrl-C正常工作,要做同樣的事,你必須發送SIGINT信號,而不是SIGKILL。 –
是的,那是我在QT中發送終止信號時發生了什麼?..是否因爲我通過「stdbuf」運行hcitool? – Jolle
'另外,QProcess :: terminate'發送'SIGTERM'而不是'SIGINT'。你可以試試':: kill(hcitool-> processId(),SIGINT)'。 'stdbuf' *可能會成爲一個問題,這取決於它如何處理信號。 –