シグナル

シグナル

「シグナル」はプロセスとプロセスの間で通信を行う際に使用される“信号”のことで、シグナルを受け取ったプロセスは“何らかの動作”を行う。その動作は、例えば「再起動」であったり、「終了」であったりする。シグナルが送信された際、OSは宛先プロセスの正常な処理の流れに割り込む。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



シグナルを送出するには、 kill コマンドに送出先プロセスのプロセス ID と、送出するシグナルを指定して実行する。シグナルの指定には、各シグナルに定義されているシグナル番号かシグナル名のどちらかを使用する。送出先プロセスの プロセス ID (PID) は、ps コマンドや pgrep コマンドで確認することができる。

シグナル番号 シグナル名 通知内容
1 HUP プロセスに再起動を通知する。
2 INT プロセスに割り込みを通知する。(Ctrl+c)
3 QUIT プロセスに終了を通知する。(coreを作成する)
9 KILL プロセスに強制終了を通知する。
15 TERM プロセスに終了を通知する。(デフォルト)
18 CONT プロセスに再開を通知する。
19 STOP プロセスに中断を通知する。
20 TSTP プロセスにサスペンドを通知する。(Ctrl+Z)


trapコマンド

trap コマンドは送出されたシグナルを捕捉し、あらかじめ指定されていた処理を実行するコマンドである。シェルスクリプトに対して送出されたシグナルは trap コマンドで捕捉できる。実行中のシェルスクリプトに対して送出されたシグナルは、trap コマンドを使用することで捕捉することが可能である。

kill コマンドなどによりシグナルリストに指定されたシグナルが送出されると、trap コマンドはそれを捕捉し、指定したコマンドを実行する。trap コマンドを使用することにより、各シグナルの規定の動作を置き換えることができる。ただし、強制終了のシグナルである9番は trap することはできないので注意が必要だ。