GNU/Linux >> Znalost Linux >  >> Linux

Sledování původu signálu UNIX?

Pro uživatele Linuxu existuje velmi snadný způsob, jak identifikovat zdroj signálu. Následuje například zjištění, která úloha posílá SIGKILL ostatním.

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

Jeden případ, kdy jsem použil '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

Bez výše uvedeného filtru 'sig==9' zobrazí 'trace' všechny signály odeslané mezi úkoly.


Ne zvenčí procesu. Druhý argument pro obsluhu signálu je siginfo_t struktura, která obsahuje PID odesílajícího procesu jako jednoho z jeho členů. Viz sigaction(2) pro více podrobností.


Ptrace lze také použít k detekci odesílatele. Existuje ptrace(GETSIGINFO) volání, které dá debuggeru možnost přečíst (a případně změnit) siginto_t struktura.


Linux
  1. UNIX / Linux:3 způsoby odesílání signálu do procesů

  2. Linux / UNIX :Jak najít soubory, které mají nastaveno SUID/SGID

  3. Jak zjistit, které procesy využívají swapovací prostor v Linuxu?

  1. Jakou techniku ​​Linux IPC použít?

  2. Jak mohu v Linuxu zjistit, který proces poslal mému procesu signál

  3. Které vlákno zpracovává signál?

  1. Co dělá Echo $? Dělat??

  2. Který příkaz v shellu Linux/UNIX sh vrátí můj aktuální adresář?

  3. Jaký je unixový příkaz ke zjištění, jaký spustitelný soubor odpovídá danému příkazu?