GNU/Linux >> Linux Esercitazione >  >> Linux

Tracciare le origini del segnale UNIX?

Per gli utenti Linux, c'è un modo molto semplice per identificare la fonte di un segnale. Ad esempio, quanto segue è trovare quale attività invia SIGKILL ad altri.

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 esempio, quando ho usato '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

Senza il filtro 'sig==9' sopra, 'trace' mostrerà tutti i segnali inviati tra le attività.


Non dall'esterno del processo. Il secondo argomento per il gestore del segnale è un siginfo_t struttura che contiene il PID del processo di invio come uno dei suoi membri. Vedi sigaction(2) per maggiori dettagli.


Ptrace può essere utilizzato anche per rilevare il mittente. C'è un ptrace(GETSIGINFO) call, che darà a un debugger la possibilità di leggere (e, possibilmente, modificare) siginto_t struct.


Linux
  1. Linux:Linux è un Unix?

  2. UNIX / Linux:3 modi per inviare segnali ai processi

  3. Linux / UNIX:come trovare i file con SUID/SGID impostato

  4. Aggiunta di caratteri di nuova riga alle variabili della shell unix

  5. Come ottenere i primi n caratteri di ogni riga nel file di dati unix

Linux quale comando

Quale strumento Unix per la generazione di Pixel-art?

Linux vs Unix

Quale comando nella shell sh di Linux/UNIX restituisce la mia directory corrente?

Qual è il comando unix per scoprire quale file eseguibile corrisponde a un determinato comando?

Quali numeri di segnale funzionano con il comando kill?