GNU/Linux >> Linux の 問題 >  >> Linux

UNIX シグナルの発信元を追跡していますか?

Linux ユーザーには、信号の発信元を特定する非常に簡単な方法があります。たとえば、次はどのタスクが SIGKILL を他のタスクに送信しているかを調べるものです。

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

「pkill -9 sleep」を使用したときの 1 つのインスタンス。

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

上記の 'sig==9' フィルターがない場合、'trace' はタスク間で送信されたすべてのシグナルを表示します。


プロセスの外からではありません。シグナル ハンドラの 2 番目の引数は siginfo_t です メンバーの 1 つとして送信プロセスの PID を含む構造体。 sigaction(2) を参照 詳細はこちら


Ptrace 送信者の検出にも使用できます。 ptrace(GETSIGINFO) があります これにより、デバッガーは siginto_t を読み取る (場合によっては変更する) ことができます。


Linux
  1. UNIX / Linux:プロセスにシグナルを送信する 3 つの方法

  2. Linux / UNIX :SUID/SGID が設定されたファイルを見つける方法

  3. どの Linux IPC 手法を使用しますか?

  1. UNIXシェル変数への改行文字の追加

  2. UNIXデータファイルの各行の最初のn文字を取得する方法

  3. 現在のディレクトリを返す Linux/UNIX sh シェルのコマンドはどれですか?

  1. Linux – LinuxはUnixですか?

  2. Mac Os X Unixですか?

  3. 特定のコマンドに対応する実行可能ファイルを見つけるための unix コマンドは何ですか?