GNU/Linux >> Tutoriales Linux >  >> Linux

¿Rastreando los orígenes de la señal de UNIX?

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.


Linux
  1. UNIX/Linux:3 Maneras de Enviar Señal a Procesos

  2. Manejo de señales UNIX/Linux:SIGEV_THREAD

  3. Colas de señal en C

  4. ¿Cómo puedo saber en Linux qué proceso envió una señal a mi proceso?

  5. ¿Qué comando en el shell sh de Linux/UNIX devuelve mi directorio actual?

Linux qué comando

¿Qué herramienta de Unix para la generación de arte de píxeles?

Linux frente a Unix

Cómo obtener los primeros n caracteres de cada línea en un archivo de datos de Unix

¿Qué hilo maneja la señal?

¿Qué números de señal funcionan con el comando de matar?