2016-11-20 14 views
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プロセスを停止してください。これが問題になります。私は終了シグナル、killシグナル、プロセスに^ Cを書こうとしましたが、何も動作しません。

実際には、killシグナルが処理を終了します。しかし、ではない良い方法では、その後の私のhci0はホールドアップ、およびhci0がでリセットされる前に、私は再びhcitool開始できないですので:

hciconfig hci0 down 
hciconfig hci0 up 

ので、任意のアイデアを、私は右のこのプロセスを終了することができますどのように? (コメントから移動)

+0

コンソールからのCtrl-Cが正しく機能する場合は、SIGKILLではなくSIGINT信号を送信する必要があります。 –

+0

はい、QTで終端信号を送信したときに起こったと思っていたことは何ですか?hcitoolを "stdbuf"を通して実行することができますか? – Jolle

+2

'QProcess :: terminate'は' SIGINT'ではなく 'SIGTERM'を送ります。 ':: kill(hcitool-> processId()、SIGINT)'を試すことができます。 'stdbuf' *はシグナルの扱い方によっては問題になる可能性があります。 –

答えて

1

通常、多くの場合、正常に処理された子プロセスにSIGHUPまたはSIGPIPEを与える必要がありますちょうどclose()ストリームにある仕事のトリック。

関連する問題