Я пытаюсь использовать инструмент Linux/Bluez: hcitool, чтобы выполнить сканирование BLE из QT.Не удается завершить работу QProcess с помощью hcitool на linux?
Я использую следующие, чтобы открыть процесс:
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 в процесс, но ничего не работает.
Фактически сигнал уничтожения завершает процесс. Но не в хорошем смысле, потому что после моего hci0 это задержать, и я не могу начать hcitool снова перед hci0 перезагрузки с:
hciconfig hci0 down
hciconfig hci0 up
Таким образом, любой идеи, как я могу прекратить этот процесс не так ли?
Если Ctrl-C с консоли работает правильно, сделать то же самое, вам нужно отправить сигнал SIGINT, а не SIGKILL. –
Да, это то, что, как я думал, произошло при отправке сигнала окончания в QT? .. Может быть, потому, что я запускаю hcitool «через» stdbuf? – Jolle
'QProcess :: terminate' отправляет' SIGTERM', а не 'SIGINT'. Вы можете попробовать ':: kill (hcitool-> processId(), SIGINT)'. Проблема 'stdbuf' * может быть проблемой в зависимости от того, как она обрабатывает сигналы. –