如果我有一个从其他进程接收信号的进程,有没有办法让我以某种方式告诉哪个进程(如果有的话)发送了信号?
strace允许我跟踪进程接收到的信号,但不允许我跟踪发出这些信号的人。
发布于 2010-05-16 12:30:54
Ptrace也可以用来检测发送者。有一个ptrace(GETSIGINFO)调用,它将为调试器提供读取(并可能更改) siginto_t结构的机会。
发布于 2010-05-13 23:28:22
不是来自进程之外的。信号处理程序的第二个参数是一个siginfo_t结构,其中包含发送进程的PID作为其成员之一。有关更多详细信息,请参阅sigaction(2)。
发布于 2020-05-29 15:09:30
对于Linux用户来说,有一种非常简单的方法来识别信号源。例如,下面是为了找出哪个任务将SIGKILL发送给其他任务。
cd /sys/kernel/debug/tracing
echo 'sig==9' > events/signal/signal_generate/filter
echo 1 > events/signal/signal_generate/enable
: > trace
echo 1 > tracing_on
tail -f trace例如,当我使用'pkill -9 sleep‘时。
# cat trace
[...]
pkill-2982 [001] d... 750347.835838: signal_generate: sig=9 errno=0 code=0 comm=sleep pid=2981 grp=1 res=0如果没有上面的'sig==9‘过滤器,'trace’将显示任务间发送的所有信号。
https://stackoverflow.com/questions/2827877
复制相似问题