trap
コマンドとは
trap
コマンドはシグナルを受け取った際の動作を設定するコマンドです。
以下のように記述します。
trap 'コマンド' シグナル
上記の「シグナル」にはシグナル名またはシグナル番号を記述します。
シグナル
使用できるシグナルの一覧はtrap -l
を実行することで確認できます。
$ trap -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
シグナル名 | シグナル番号 | 説明 |
---|---|---|
SIGHUP | 1 | 制御端末を切断するか、制御プロセスを終了 |
SIGINT | 2 | ユーザーがCtrl + C (割り込みシグナル)を入力 |
SIGQUIT | 3 | ユーザーがCtrl + \ (終了シグナル)を入力 |
SIGTERM | 15 | 終了シグナル。`kill)コマンドのデフォルトシグナル |
EXIT | 0 | シェルの終了時 |
設定されているコマンドの確認
現在設定されているコマンドを確認するにはtrap -p
を実行します。
$ trap 'echo trap-exit' EXIT
$ trap 'echo trap-sigint-sigquit' SIGINT 3
$ trap -p
trap -- 'echo trap-exit' EXIT
trap -- 'echo trap-sigint-sigquit' SIGINT
trap -- 'echo trap-sigint-sigquit' SIGQUIT
trap -p シグナル
とすることで特定のシグナルの設定を確認できます。
$ trap -p EXIT
trap -- 'echo trap-exit' EXIT
設定の上書き
同じシグナルに対して複数回設定すると上書きされます。
$ trap 'echo trap-exit' EXIT
$ trap 'echo trap-sample' EXIT
$ trap -p EXIT
trap -- 'echo trap-sample' EXIT
また設定をリセットする場合にはコマンド部分を記述せずに実行します。
$ trap EXIT
$ trap -p EXIT
<!-- 何も出力されない -->