プロセスに直接配信されたシグナルとデバッガー経由で配信されたシグナルを区別できますか?
ケース 1:
$ ./process1
process1 (not ptraced)
//set up handler
alarm(5);
....
//signal is handled and I can parse handler parameters
ケース 2:
$ debugger1 ./process1
process1 (is ptraced by debugger1)
//set up handler
alarm(5);
...
//signal is catched by debugger1. It resumes process1 with PTRACE_CONT,
// signal_number is 4th parameter of PTRACE_CONT.
//signal is redelivered to process1
//and then is handled.
では、デバッガーによって再配信されたのか、システムによって送信されたのか、シグナルハンドラーでどのように検出できますか?
OSはLinux、カーネルは2.6.30。プログラムはプレーンな C で書かれています。実際のプログラムでは SIGALRM が使用されますが、それは ではなく で生成されalarm()
ますsetitimer()
。