JP1/Advanced Shell
形式
trap [action][signal ...]
機能
シグナルを受け取ったときの動作を設定します。signalに指定されたシグナルをシェルが受け取ると,actionに指定された動作を実行します。
引数を指定しないで実行した場合,シグナルに設定されている動作を次の形式で標準出力に出力します。
シグナル種別 出力形式 名称が定義されているシグナルの場合 trap -- action "先頭のSIGを除いたシグナル名" 名称が定義されていないシグナルの場合 trap -- action UNKNOWN SIGNAL 1つのシグナル番号に複数の名称が定義されているシグナルに対する動作を次に示します。
- 【Linux限定】
シグナル名称 別名称 trapコマンドによるactionの設定 SIGSYS SIGUNUSED SIGSYS 設定できます SIGUNUSED 設定できます
- 注
- 拡張機能では,SIGUNUSEDではなく,SIGSYSを主なシグナル名称として扱っているため,trapコマンドでもSIGSYSをシグナル名称として扱います。
- 【AIX限定】
シグナル名称 別名称1 別名称2 trapコマンドによるactionの設定 SIGABRT SIGLOST SIGIOT SIGABRT 設定できません SIGLOST 設定できます SIGIOT 設定できます SIGIO SIGPOLL なし 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 エラー終了
注意事項
- signalに指定するシグナル番号にsigned int型の範囲を超える値を指定すると桁あふれが発生し,あふれた値で動作します。signed int型の範囲内の値を指定してください。
- Windows環境でこのコマンドを実行した場合は,メッセージを出力して,戻り値0で正常終了します。シグナルに対して処理はしません。
- この特殊組み込みコマンドは,コマンドの構文を誤るとコマンドを実行しているシェルが終了します。
使用例
- INTシグナルを受け取った場合,'trapped.'のメッセージを出力します。
trap 'echo trapped.' INT- シグナルに設定されているactionを表示します。
ジョブ定義スクリプトの内容
実行ジョブのSTDOUTファイルの内容
trap trap -- 'echo Hangup.' HUP trap -- 'echo trapped.' INT
******** JOB SCOPE STDOUT ******** trap -- 'echo Hangup.' HUP trap -- 'echo trapped.' INT
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.