GNU/Linux >> Tutoriels Linux >  >> Linux

Tracer les origines des signaux UNIX ?

Pour les utilisateurs de Linux, il existe un moyen très simple d'identifier la source d'un signal. Par exemple, ce qui suit consiste à trouver quelle tâche envoie SIGKILL aux autres.

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 exemple, quand j'ai utilisé '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

Sans le filtre 'sig==9' ci-dessus, 'trace' affichera tous les signaux envoyés entre les tâches.


Pas de l'extérieur du processus. Le deuxième argument du gestionnaire de signal est un siginfo_t structure qui contient le PID du processus d'envoi comme l'un de ses membres. Voir sigaction(2) pour plus de détails.


Ptrace peut également être utilisé pour détecter l'expéditeur. Il y a un ptrace(GETSIGINFO) call, qui donnera au débogueur une chance de lire (et éventuellement de modifier) ​​siginto_t structure.


Linux
  1. Linux – Linux est-il un Unix ?

  2. Qu'est-ce que Echo $ ? Faire??

  3. UNIX / Linux :3 façons d'envoyer un signal aux processus

  4. Gestion des signaux UNIX/Linux :SIGEV_THREAD

  5. Mise en file d'attente des signaux en C

Linux Quelle commande

Mac Os X est-il Unix ?

Quel outil Unix pour la génération Pixel-art ?

Linux contre Unix

Quelle commande du shell sh Linux/UNIX renvoie mon répertoire actuel ?

Quels numéros de signal fonctionnent avec la commande kill ?