Linux 跟踪UNIX信号源?

Linux 跟踪UNIX信号源?,linux,signals,unix,Linux,Signals,Unix,如果我有一个进程接收来自其他进程的信号,有没有办法告诉我哪个进程(如果有的话)发送了信号 strace允许我跟踪进程已接收到的信号,但不允许我跟踪发出这些信号的人。不是来自进程外部。信号处理程序的第二个参数是siginfo\u t结构,其中包含发送进程的PID作为其成员之一。有关更多详细信息,请参阅。Ptrace也可用于检测发件人。有一个ptrace(GETSIGINFO)调用,它将使调试器有机会读取(并可能更改)sigino\tstruct。对于Linux用户,有一种非常简单的方法来识别信号源

如果我有一个进程接收来自其他进程的信号,有没有办法告诉我哪个进程(如果有的话)发送了信号


strace
允许我跟踪进程已接收到的信号,但不允许我跟踪发出这些信号的人。

不是来自进程外部。信号处理程序的第二个参数是
siginfo\u t
结构,其中包含发送进程的PID作为其成员之一。有关更多详细信息,请参阅。

Ptrace
也可用于检测发件人。有一个
ptrace(GETSIGINFO)
调用,它将使调试器有机会读取(并可能更改)
sigino\t
struct。

对于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'将显示任务之间发送的所有信号。

据我所知,当前的解决方案不允许我找出在使用了SIGKILL或SIGSTOP的情况下哪个进程终止/停止了另一个进程。真的吗?你必须看看这种巫毒的动态追踪方法,比如bpftrace