ptraceはデバッガの中核であるシステムコールですが、デバッガとデバッギの間でどのようにシグナルが処理されるかよくわかりません。
linux manページによると
トレースの実行中、子プロセスはシグナルが配送されるたびに、 たとえそのシグナルが 無視すべきものであっても停止する (SIGKILL は例外で、通常どおりの効果をもたらす)。 親プロセスには次の wait(2) で通知され、停止している間に子プロセスを調べたり修 正したりすることができる。 そして親プロセスは子プロセスの実行を再開させるが、配送 された シグナルを無視することもできる (あるいは代わりに別のシグナルを 配送するこ ともできる) 。
ということになっています。
これは例えば、デバッギの実行がint3命令に到達しカーネルからSIGTRAPシグナルを受け取ったときには
デバッギは単に停止し、デバッガがwaitシステムコールを使ってデバッギの状態変化を受け取るということだと思います。以前にあるプログラムをデバッグしたときのことなのですが、デバッギがSIGTRAPに対して登録したシグナルハンドラが呼び出されませんでした。「デバッギは停止する」という表現が曖昧でよくわからないのですが、この際デバッギに配送されたシグナルはどう処理されるのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。