シグナルを受け取った時に特定の処理を実行する

Linuxでは、シェルスクリプトに送られてきたシグナルをハンドリングし、特定の処理を実行することのできるtrapコマンドがあります。


例えば、killコマンドによりシグナルを受信した場合とか、分かりやすい例でいうと、Ctrl + C (SIGINT)などの割り込みシグナルとか。


こいつを設定しておくと、例えばスクリプト終了時に確実に/tmpあたりに置く一時ファイルなどのお掃除処理なんかが出来ます。
# とはいっても、9番シグナル(SIGKILL)、つまり強制終了だけは、trapできませんが。


使い方は以下。シグナルリストはスペース区切りで、シグナル番号を複数書くことが出来ます。

trap '${実行コマンド}' ${シグナルリスト}


例えば、以下のコマンドを実行して、Ctrl + Cを押すとtrapできるはずです。

$ trap 'echo Ctrl+C pushed.' 2

※ ここで、Ctrl+Cを押すと、、、

$ Ctrl+C pushed.


と、こんな感じです。


シェルスクリプトの中でクローズ処理をするときとか、全てのシェルスクリプトから実行されている(source)ような、スクリプトファイルの中に書いておくと、全てのスクリプトのクローズ処理が実現できるかもしれません。

・・・ご利用は慎重に。