GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ursprung von UNIX-Signalen zurückverfolgen?

Für Linux-Benutzer gibt es eine sehr einfache Möglichkeit, die Quelle eines Signals zu identifizieren. Im Folgenden finden Sie beispielsweise heraus, welche Aufgabe SIGKILL an andere sendet.

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

Ein Beispiel, als ich 'pkill -9 sleep' verwendet habe.

# cat trace
[...]
       pkill-2982  [001] d... 750347.835838: signal_generate: sig=9 errno=0 code=0 comm=sleep pid=2981 grp=1 res=0

Ohne den obigen 'sig==9'-Filter zeigt 'trace' alle Signale, die zwischen Tasks gesendet werden.


Nicht von außerhalb des Prozesses. Das zweite Argument für den Signalhandler ist ein siginfo_t Struktur, die als eines ihrer Mitglieder die PID des sendenden Prozesses enthält. Siehe sigaction(2) für weitere Details.


Ptrace kann auch zur Erkennung des Absenders verwendet werden. Es gibt einen ptrace(GETSIGINFO) aufrufen, was einem Debugger die Möglichkeit gibt, siginto_t zu lesen (und möglicherweise zu ändern). struct.


Linux
  1. Linux / UNIX :So finden Sie Dateien, für die SUID/SGID festgelegt ist

  2. Wie finde ich heraus, welche Prozesse Swap Space in Linux verwenden?

  3. UNIX/Linux-Signalverarbeitung:SIGEV_THREAD

  4. Signalwarteschlangen in C

  5. Wie kann ich unter Linux feststellen, welcher Prozess meinem Prozess ein Signal gesendet hat?

Welcher Linux-Befehl

Ist Mac OS X Unix?

Welches Unix-Tool zur Pixel-Art-Generierung?

Was bedeutet Echo $? Tun??

Linux gegen Unix

Welche Signalnummern funktionieren mit dem Kill-Befehl?