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

プロセスがリッスンしている信号を確認する方法は?

実行中のプロセスが信号をキャッチするか、無視するか、ブロックするかを確認するにはどうすればよいですか?理想的には、信号のリストを表示したい、または少なくとも実際に信号を送信して確認する必要はありません。

承認された回答:

Linuxでは、プロセスのPIDを見つけて、 / proc / $ PID / statusを確認できます。 。これには、ブロックされた信号(SigBlk)、無視された信号(SigIgn)、またはキャッチされた信号(SigCgt)を説明する行が含まれています。

# cat /proc/1/status
...
SigBlk: 0000000000000000
SigIgn: fffffffe57f0d8fc
SigCgt: 00000000280b2603
...

右側の数字はビットマスクです。 16進数から2進数に変換すると、各1ビットはキャッチされた信号を表し、右から左に1から数えます。したがって、SigCgt行を解釈すると、 initであることがわかります。 プロセスは次のシグナルをキャッチしています:

00000000280b2603 ==> 101000000010110010011000000011
                     | |       | ||  |  ||       |`->  1 = SIGHUP
                     | |       | ||  |  ||       `-->  2 = SIGINT
                     | |       | ||  |  |`----------> 10 = SIGUSR1
                     | |       | ||  |  `-----------> 11 = SIGSEGV
                     | |       | ||  `--------------> 14 = SIGALRM
                     | |       | |`-----------------> 17 = SIGCHLD
                     | |       | `------------------> 18 = SIGCONT
                     | |       `--------------------> 20 = SIGTSTP
                     | `----------------------------> 28 = SIGWINCH
                     `------------------------------> 30 = SIGPWR

kill -l <​​/ code>を実行して、番号から名前へのマッピングを見つけました bashから。)

編集 :そして、人気のある要望により、POSIXshのスクリプト。

sigparse () {
    i=0
    # bits="$(printf "16i 2o %X p" "0x$1" | dc)" # variant for busybox
    bits="$(printf "ibase=16; obase=2; %X\n" "0x$1" | bc)"
    while [ -n "$bits" ] ; do
        i="$(expr "$i" + 1)"
        case "$bits" in
            *1) printf " %s(%s)" "$(kill -l "$i")" "$i" ;;
        esac
        bits="${bits%?}"
    done
}

grep "^Sig...:" "/proc/$1/status" | while read a b ; do
        printf "%s%s\n" "$a" "$(sigparse "$b")"
    done # | fmt -t  # uncomment for pretty-printing

Linux
  1. Linuxpmapコマンドでプロセスのメモリ使用量を確認する方法

  2. ターミナルで使用しているシェルをテストする方法は?

  3. さまざまな信号が送信される原因は何ですか?

  1. LinuxでPythonを使用してプロセスがまだ実行されているかどうかを確認するには?

  2. 特定のプロセスの実行時にどの共有ライブラリがロードされているかを確認する方法は?

  3. javaを使用している実行中のプロセスを特定するにはどうすればよいですか?

  1. ゾンビプロセスとは何ですか?ゾンビプロセスを見つけて殺す方法は?

  2. LinuxでNetstatを使用してリスニング/オープンポートを確認する方法

  3. 保留中のシグナルとは?