How to read bitmask for the signals

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux

Issue

  • How to check which signals are blocked for the process.
$ cat /proc/8843/status |grep ^Sig
SigQ:   1/62809
SigPnd: 0000000000000000
SigBlk: 0000000056727a01
SigIgn: 0000000000381000
SigCgt: 00000001c98044ff

Resolution

SigPnd: 0000000000000000: Signals Pending (Raised, but waiting to be acted upon potentially because they are blocked).

SigBlk: 0000000056727a01: Signals that are blocked by the process. This can be a temporary thing. The application can be coded in such a way to temporarily block a signal. The kernel will then delay delivery of that signal until such time as it becomes unblocked or the signals are asked to be delivered.

SigIgn: 0000000000381000: Signals that are ignored by the process. They are simply thrown away. (Except for SIGKILL and SIGSTOP, which cannot be ignored)

SigCgt: 00000001c98044ff: Signals that can be caught by the process.

  • Here's an example of how those bitmasks for SigBlk, SigCgt, etc can be read. Let's take SigBlk 0000000056727a01 as an example and convert the SigBlk to binary.
0000000056727a01 = 0101 0110 0111 0010 0111 1010 0000 0001

NOTE: The position of the set bits (1's) from right to left should map to the "kill -l" list of signals

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    
  • From above output it is confirmed signal numbers 1,10,12,13,14,15 etc are blocked.

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.