起動した がまたはQProcessによって外部的に終了したことを検出したい。これは、自分で起動するプロセスを作成したときに、クラッシュ (バグ) と外部干渉を区別する上で重要です。SIGKILLSIGTERM
に接続されたスロットを介して監視対象のプロセスを登録し、 (を使用して) ハンドラーQProcess::startedを設定して、を使用してプロセスのステータスを取得しようとしました。問題は、内部のカーネル データ構造をクリアすることです。ハンドラーを実装上のハンドラーに適切にチェーンしても、その pid の次の呼び出しが失敗するため、後者は子ステータスを取得できません。プロセスの状態をthroughに設定すると、通常は への呼び出しがハングするのを回避できますが、まだ修正できていないまれなケースがあります。SIGCHLDsigactionwaitpidwaitpidQProcesswaitpidQProcess::ProcessState::NotRunningQProcess::setProcessStatewaitForFinished
Qtのソースコードを変更してステータス情報をどこかに保存する以外に、これを行うためのより良い方法がないかどうか疑問に思っていました。
注:クラッシュもシグナルで終了することを知っていますSIGABRT。ここでの主な問題はSIGKILL、Linux のメモリ不足キラーがプロセスの終了の原因であると教えてくれる可能性があることです。