シグナル
シグナル
「シグナル」はプロセスとプロセスの間で通信を行う際に使用される“信号”のことで、シグナルを受け取ったプロセスは“何らかの動作”を行う。その動作は、例えば「再起動」であったり、「終了」であったりする。シグナルが送信された際、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 することはできないので注意が必要だ。