カーネルでシグナリング(割り込み)メカニズムはどのように処理されますか?私が尋ねる原因は次のとおりです。どういうわけかSIGABRT信号が私のアプリケーションによって受信され、それがどこから来ているのかを知りたいのです。
2 に答える
1
cnicutarの答えは私見の最良の推測です。
信号が別のプロセスによって発行された可能性がありますが、SIGBARTの場合、abort(3)
libc関数を介して信号を受信する同じプロセスによって発行される可能性が最も高くなります。
疑わしい場合は、でアプリケーションを実行して、そのシステムコールがプログラムまたは依存ライブラリ内から実際に呼び出されてstrace -e kill yourapp you args ...
いるかどうかをすばやく確認できます。kill
または、gdbを使用しますcatch syscall
。
SIGKILL
悪名高い「OOMキラー」が動作したときなど、カーネル自体が信号を発する場合があることに注意してください。
ところで、シグナルは非同期で配信され、プログラムの通常のワークフローを混乱させます。これが、彼らが追跡するのが苦痛な理由です。SystemTapなどの機械以外に、カーネル内での信号の放出と配信を追跡またはログに記録する方法がわかりません。
于 2011-07-13T21:33:25.260 に答える