trapコマンド(シグナルを受け取ったときの動作を設定する)【UNIX限定】

形式

trap [action][signal ...]

機能

シグナルを受け取ったときの動作を設定します。signalに指定されたシグナルをシェルが受け取ると,actionに指定された動作を実行します。

引数を指定しないで実行した場合,シグナルに設定されている動作を次の形式で標準出力に出力します。

シグナル種別出力形式
名称が定義されているシグナルの場合trap -- action "先頭のSIGを除いたシグナル名"
名称が定義されていないシグナルの場合trap -- action UNKNOWN SIGNAL

1つのシグナル番号に複数の名称が定義されているシグナルに対する動作を次に示します。

【Linux限定】
シグナル名称別名称trapコマンドによるactionの設定
SIGSYSSIGUNUSEDSIGSYS設定できます
SIGUNUSED設定できます
拡張機能では,SIGUNUSEDではなく,SIGSYSを主なシグナル名称として扱っているため,trapコマンドでもSIGSYSをシグナル名称として扱います。

【AIX限定】
シグナル名称別名称1別名称2trapコマンドによるactionの設定
SIGABRTSIGLOSTSIGIOTSIGABRT設定できません
SIGLOST設定できます
SIGIOT設定できます
SIGIOSIGPOLLなしSIGIO設定できます
SIGPOLL設定できます

また,1つのシグナル番号に複数の名称が定義されているシグナルに対して,trapコマンドでactionを設定した場合,出力するシグナル名はどれか1つのシグナル名になります。

拡張機能でactionを登録したシグナルに関しては,シグナルに設定されている動作を表示しません。

引数

action
指定されたシグナルを受け取ったときの動作を指定します。actionにハイフンを指定した場合,signalに一致する指定済みのトラップがリセットされ,デフォルトに戻ります。actionを指定しないで,signalを指定した場合も同様にデフォルトに戻ります。
actionに""を指定した場合,signalに指定されたシグナルを無視(SIG_IGN)します。
signal
trapの対象となるシグナルを指定します。signalにはシグナル番号またはシグナル名称を指定します。シグナル名称には,シグナル名から先頭の「SIG」を除いた名称を指定してください(例:SIGINTであれば「INT」と指定する)。それぞれのシグナルの仕様については,使用しているOSのマニュアルを参照してください。ただし,SIGTERMは指定できません。signalはスペースで区切って複数のシグナルを指定できます。
また,signalには0,"EXIT"または"ERR"を指定できます。signalに0または"EXIT"を指定し,trapコマンドを実行した場合,シェル終了時にactionに指定したコマンドを実行します。"ERR"を指定し,trapコマンドを実行した場合,trapコマンド以降に実行したtypesetコマンドおよび特殊組み込みコマンド以外のコマンドが0以外の戻り値で完了すると,actionに指定した動作を実行します。
AIXの場合,signalにSIGWAITINGは指定できません。SIGWAITINGを指定して実行した場合,エラー終了します。

戻り値

戻り値意味
0正常終了
1エラー終了

注意事項

使用例