Para los usuarios de Linux, existe una manera muy fácil de identificar la fuente de una señal. Por ejemplo, lo siguiente es encontrar qué tarea envía SIGKILL a otros.
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
Un ejemplo, cuando usé '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
Sin el filtro 'sig==9' anterior, 'trace' mostrará todas las señales enviadas entre tareas.
No desde fuera del proceso. El segundo argumento para el controlador de señales es un siginfo_t estructura que contiene el PID del proceso de envío como uno de sus miembros. Ver sigaction(2) para más detalles.
Ptrace también se puede utilizar para detectar el remitente. Hay un ptrace(GETSIGINFO) llamada, que le dará a un depurador la oportunidad de leer (y, posiblemente, cambiar) siginto_t estructura.