2
QT에서 BLE 스캔을하기 위해 Linux/Bluez 도구 hcitool을 사용하려고합니다. 모든 결과를 저장하기 위해 다음리눅스에서 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 프로세스를 중지하십시오. 그리고 이것은 일이 잘못되는 곳입니다. 나는 종료 신호, kill 신호, 프로세스에^C를 쓰려고했지만 아무것도 작동하지 않는다.
실제로 kill 신호가 프로세스를 완료합니다. 그러나하지 hci0가 리셋되기 전에 내 hci0가 개최, 나는 다시 hcitool 시작할 수 있습니다 나중에 있기 때문에 좋은 방법 :이 프로세스 권한을 종료 할 수있는 방법에
hciconfig hci0 down
hciconfig hci0 up
그래서 어떤 아이디어? (주석에서 이동)
콘솔에서 Ctrl-C가 제대로 작동하면 동일한 작업을 수행하려면 SIGKILL이 아니라 SIGINT 신호를 보내야합니다. –
예, QT에서 종료 신호를 보낼 때 무슨 일이 일어 났을까요? ... "stdbuf를 통해 hcitool을 실행했기 때문일 수 있습니까? – Jolle
'QProcess :: terminate'는'SIGINT'보다는'SIGTERM'을 전송합니다. ':: kill (hcitool-> processId(), SIGINT)'를 시도해 볼 수있다. 'stdbuf' *는 신호 처리 방법에 따라 문제가 될 수 있습니다. –