【发布时间】:2010-03-29 16:08:36
【问题描述】:
我可以区分直接传递给进程和通过调试器传递的信号吗?
案例一:
$ ./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.
那么,我如何在信号处理程序中检测到它是由调试器重新传递还是由系统发送?
操作系统是 Linux,内核是 2.6.30。程序是用纯 C 编写的。在实际程序中使用 SIGALRM,但它不是由alarm() 生成的,而是由setitimer() 生成的。
【问题讨论】:
-
我确信这是一个很好的问题,但是为处理线性时不变系统、FFT、幅度和相位的东西类型保留“信号处理”标签会很有帮助等。或者也许有人有更好的解决方案。
-
@Steve,谢谢。你是对的。