問題タブ [sigaction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - LinuxでQt4を使用してQProcessを終了させたシグナルを特定するにはどうすればよいですか?
起動した がまたはQProcess
によって外部的に終了したことを検出したい。これは、自分で起動するプロセスを作成したときに、クラッシュ (バグ) と外部干渉を区別する上で重要です。SIGKILL
SIGTERM
に接続されたスロットを介して監視対象のプロセスを登録し、 (を使用して) ハンドラーQProcess::started
を設定して、を使用してプロセスのステータスを取得しようとしました。問題は、内部のカーネル データ構造をクリアすることです。ハンドラーを実装上のハンドラーに適切にチェーンしても、その pid の次の呼び出しが失敗するため、後者は子ステータスを取得できません。プロセスの状態をthroughに設定すると、通常は への呼び出しがハングするのを回避できますが、まだ修正できていないまれなケースがあります。SIGCHLD
sigaction
waitpid
waitpid
QProcess
waitpid
QProcess::ProcessState::NotRunning
QProcess::setProcessState
waitForFinished
Qtのソースコードを変更してステータス情報をどこかに保存する以外に、これを行うためのより良い方法がないかどうか疑問に思っていました。
注:クラッシュもシグナルで終了することを知っていますSIGABRT
。ここでの主な問題はSIGKILL
、Linux のメモリ不足キラーがプロセスの終了の原因であると教えてくれる可能性があることです。
multithreading - 大規模なマルチスレッドCプログラムでSEGFAULTの理由を見つける方法は?
SEGFAULT シグナルによって非常にランダムにクラッシュする Linux 組み込みシステム用のマルチスレッド プログラムを使用しています。
クラッシュは本番環境でのみ発生し、テスト中には発生しないため、gdb を使用せずに問題を見つける必要があります。
プログラムのシンボル テーブルを知っていて、メイン スレッドで sigaction() と backtrace() を使用していますが、十分な情報が得られません。バックトレースされた行は、sigaction 関数自体からのものです。50 フレームのキャプチャを許可し、コンパイルには gcc で -g フラグを使用します。
プログラムは 15 のスレッドを実行しているため、どのスレッドからシグナルが送信されているかを把握して、可能性を制限できるようにしたいと考えています。参考までに、メイン スレッドはフォークを作成し、そのフォークは残りの 14 のスレッドを作成します。
どうすればこれを達成できますか? すでに持っている情報で何ができますか?
ご協力ありがとうございました
PD: コアダンプ ファイルも試しましたが、このオプションがカーネル コンパイルに含まれておらず、変更できないため生成されません。