跟踪UNIX信号来源?

jdi*_*zle 12 unix linux signals

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

strace 让我跟踪一个进程收到的信号,但不允许我跟踪发出进程的信号.

fir*_*iro 10

对于 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
Run Code Online (Sandbox Code Playgroud)

一个例子是,当我使用“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
Run Code Online (Sandbox Code Playgroud)

如果没有上述“sig==9”过滤器,“trace”将显示任务之间发送的所有信号。


Ign*_*ams 8

不是来自外部的过程.信号处理程序的第二个参数是一个siginfo_t结构,它包含发送进程的PID作为其成员之一.有关sigaction(2)详细信息,请参阅


osg*_*sgx 2

Ptrace也可用于检测发件人。有一个ptrace(GETSIGINFO)调用,这将使调试器有机会读取(并且可能更改)siginto_t结构。