GNU/Linux >> Belajar Linux >  >> Linux

Melacak asal sinyal UNIX?

Untuk pengguna Linux, ada cara yang sangat mudah untuk mengidentifikasi sumber sinyal. Misalnya, berikut ini untuk menemukan tugas mana yang mengirim SIGKILL ke orang lain.

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

Salah satu contohnya, saat saya menggunakan '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

Tanpa filter 'sig==9' di atas, 'jejak' akan menampilkan semua sinyal yang dikirim di antara tugas.


Bukan dari luar proses. Argumen kedua untuk penangan sinyal adalah siginfo_t struktur yang berisi PID dari proses pengiriman sebagai salah satu anggotanya. Lihat sigaction(2) untuk detail lebih lanjut.


Ptrace dapat digunakan untuk mendeteksi pengirim juga. Ada ptrace(GETSIGINFO) panggilan, yang akan memberi debugger kesempatan untuk membaca (dan, mungkin, mengubah) siginto_t struktur.


Linux
  1. Linux – Apakah Linux Sebuah Unix?

  2. Apakah Mac Os X Unix?

  3. Linux / UNIX :Cara menemukan file yang memiliki set SUID/SGID

  1. Bagaimana cara mengetahui proses mana yang menggunakan ruang swap di Linux?

  2. Teknik IPC Linux mana yang digunakan?

  3. Bagaimana saya bisa tahu di Linux proses mana yang mengirim sinyal ke proses saya

  1. Apa yang Digema $? Mengerjakan??

  2. Cara mendapatkan n karakter pertama dari setiap baris dalam file data unix

  3. Utas mana yang menangani sinyal?