trapコマンド(シグナルや強制終了要求を受けたときの動作を設定する)
trapコマンドはUNIX版とWindows版で提供する機能が異なります。UNIX版で提供する機能については,「(1) trapコマンド【UNIX版】」を参照してください。Windows版で提供する機能については,「(2) trapコマンド【Windows版】」を参照してください。
- 〈このページの構成〉
(1) trapコマンド【UNIX版】
形式
trap [action][signal ...]
機能
シグナルを受け取ったときの動作を設定します。signalに指定されたシグナルをシェルが受け取ると,actionに指定された動作を実行します。
引数を指定しないで実行した場合,シグナルに設定されている動作を次の形式で標準出力に出力します。
シグナル種別 |
出力形式 |
---|---|
名称が定義されているシグナルの場合 |
trap -- action "先頭のSIGを除いたシグナル名" |
名称が定義されていないシグナルの場合 |
trap -- action UNKNOWN SIGNAL |
1つのシグナル番号に複数の名称が定義されているシグナルに対する動作を次に示します。
- 【Linux限定】
-
シグナル名称
別名称
trapコマンドによるactionの設定
SIGSYS
SIGUNUSED
SIGSYS
設定できます
SIGUNUSED
設定できます
- 【AIX限定】
-
シグナル名称
別名称1
別名称2
trapコマンドによるactionの設定
SIGABRT
SIGLOST
SIGIOT
SIGABRT
設定できます
SIGLOST
設定できます
SIGIOT
設定できます
SIGIO
SIGPOLL
なし
SIGIO
設定できます
SIGPOLL
設定できます
- 【HP-UX,Solaris限定】
-
シグナル名称
別名称
trapコマンドによるactionの設定
SIGABRT
SIGIOT
SIGABRT
設定できます
SIGIOT
設定できます
SIGIO
SIGPOLL
SIGIO
設定できます
SIGPOLL
設定できます
また,1つのシグナル番号に複数の名称が定義されているシグナルに対して,trapコマンドでactionを設定した場合,出力するシグナル名はどれか1つのシグナル名になります。
引数
- action
-
指定されたシグナルを受け取ったときの動作を指定します。
actionにハイフンを指定した場合,signalに一致する指定済みのトラップがリセットされ,デフォルトに戻ります。actionを指定しないで,signalにシグナル番号を指定した場合も同様にデフォルトに戻ります。
actionに""を指定した場合,signalに指定されたシグナルを無視(SIG_IGN)します。
ただし,SIGTERMについては,actionに""を指定しても,シグナルを無視(SIG_IGN)しません。
指定した場合,現在設定されているactionを変更しないで,trapコマンドは正常終了します。
- signal
-
trapの対象となるシグナルを指定します。
signalにはシグナル番号またはシグナル名称を指定します。シグナル名称には,シグナル名から先頭の「SIG」を除いた名称を指定してください(例:SIGINTであれば「INT」と指定する)。それぞれのシグナルの仕様については,使用しているOSのマニュアルを参照してください。
なお,SIGTERMを指定した場合の動作は,環境設定パラメーターTRAP_ACTION_SIGTERMの指定に従います。詳細については,「7. 環境ファイルで設定するパラメーター」の「TRAP_ACTION_SIGTERMパラメーター(ジョブコントローラが強制終了要求を受けたときの動作を定義する)」を参照してください。
signalはスペースで区切って複数のシグナルを指定できます。また,signalには0,"EXIT"または"ERR"を指定できます。
- signalに0または"EXIT"を指定し,trapコマンドを実行した場合
-
シェル終了時にactionに指定したコマンドを実行します。
- signalに"ERR"を指定し,trapコマンドを実行した場合
-
trapコマンド以降に実行した次に示すコマンドが0以外の終了コードで完了すると,actionに指定した動作を実行します。
-
正規組み込みコマンド
-
typesetコマンド
-
関数内,および外部スクリプト内で書式不正によってエラーとなったreturnコマンド
-
AIXの場合,signalにSIGWAITINGは指定できません。SIGWAITINGを指定して実行した場合,エラー終了します。
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1 |
エラー終了 |
注意事項
-
trapコマンドは0より小さい値を引数signalに指定すると不当なシグナルと判断します。そのため,引数signalを数値で指定する場合は,0〜シグナルの有効範囲内の値を指定してください。
-
trapコマンドによる動作定義にシェル拡張コマンドadshreadを指定すると,強制終了要求を受けても入力応答待ちとなりジョブが終了しなくなります。TRAP_ACTION_SIGTERMパラメーターのオペランドにTERMを指定した場合,またはAUTOを指定してJP1/AJSからジョブを起動した場合は,trapコマンドによる動作定義にシェル拡張コマンドadshreadを指定しないでください。
-
trapコマンドによる動作定義にシェル運用コマンドadshjavaを指定して強制終了すると,trapアクション内でJavaのバッチアプリケーションを実行できますが,trapアクション実行中にさらに強制終了すると,adshjavaコマンドは強制終了されません。このため,TRAP_ACTION_SIGTERMパラメーターのオペランドにTERMを指定した場合,またはAUTOを指定してJP1/AJSからジョブを起動した場合はtrapアクション内でadshjavaコマンドは使用しないでください。ユーザー固有の後処理としてJavaのバッチアプリケーションを動かしたい場合,cjexecjobコマンドおよびcjkilljobコマンドを使用してください。
-
この特殊組み込みコマンドは,コマンドの構文を誤るとコマンドを実行しているシェルが終了します。
-
引数actionを省略し,引数signalにシグナル番号だけを指定するとtrapコマンドは引数signalに指定されたアクションをリセットしデフォルトに戻ります。しかし,SIGを除いたシグナル名称だけを指定すると,trapコマンドは引数signalに指定されたアクションをリセットしないで終了します。
- 例:trap 15
-
→シグナル番号15のアクションをリセットし,デフォルトに戻ります。
- 例:trap TERM
-
→アクションをリセットしません。
使用例
-
INTシグナルを受け取った場合,echoコマンドで'trapped.'を出力します。
trap 'echo trapped.' INT
-
シグナルに設定されているactionを表示します。
ジョブ定義スクリプトの内容
trap 'echo Hangup.' HUP trap 'echo trapped.' INT trap
実行ジョブのSTDOUTファイルの内容
******** JOB SCOPE STDOUT ******** trap -- 'echo Hangup.' HUP trap -- 'echo trapped.' INT
(2) trapコマンド【Windows版】
形式
trap [action][method]
機能
強制終了要求を受けたときの動作を設定します。
- TRAP_ACTION_SIGTERMパラメーターにTERMを指定した場合:
-
強制終了要求をジョブコントローラが受けたときの動作を設定できます。ジョブコントローラはmethodに指定された強制終了要求を受けると,actionに指定された動作を実行します。
methodにTERMでも15でもない強制終了要求を指定したとき,指定したactionが設定されないで,メッセージKNAX6718-Iを出力し,終了コード0を返して終了します。
引数を指定しないで実行した場合,強制終了要求に対して設定されている動作を次の形式で標準出力に出力します。
出力形式
trap -- action "強制終了の方法を示す文字列"
- TRAP_ACTION_SIGTERMパラメーターにDISABLEを指定した場合:
-
メッセージKNAX6710-I を出力して,終了コード0を返して常に正常終了します。強制終了要求に対して処理はしません。
引数
- action
-
強制終了要求を受けたときの動作を指定します。
actionにハイフンを指定した場合,methodに一致する指定済みのactionがリセットされ,methodに対しての動作定義(action)が無効になり,何も設定されていない状態に戻ります。actionを指定しないでmethodに15を指定した場合も同様に,methodに対しての動作定義(action)が無効になり,何も設定されていない状態に戻ります。
actionに""を指定した場合,現在設定されているactionを変更しないで,trapコマンドは正常終了します。
- method
-
trapの対象となる強制終了の方法を指定します。
methodにはTERMまたは15を指定します。
- TERMまたは15
-
TerminateProcessなどによるプロセス即時終了(例:JP1/AJSからの強制終了,taskkillコマンド)。
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1 |
エラー終了 |
注意事項
-
「kill -KILL プロセスID」を実行して任意のジョブのadshexec.exeを終了させると,終了させられたジョブの「trap action TERM」で定義されたactionが実行されます。
-
TRAP_ACTION_SIGTERMパラメーターにTERMを指定した場合,trapコマンドにオプションを指定するとエラーになります。TRAP_ACTION_SIGTERMにTERM以外を指定した場合,trapコマンドにオプションを指定してもエラーになりません。
-
trapコマンドによる動作定義にシェル拡張コマンドadshreadを指定すると,強制終了要求を受けても入力応答待ちとなり,ジョブが終了しなくなります。TRAP_ACTION_SIGTERMパラメーターのオペランドにTERMを指定した場合,trapコマンドによる動作定義にシェル拡張コマンドadshreadを指定しないでください。
-
trapコマンドによる動作定義にシェル運用コマンドadshjavaを指定して強制終了すると,Javaのバッチアプリケーションを実行しないで,終了コード1で終了します。TRAP_ACTION_SIGTERMパラメーターのオペランドにTERMを指定した場合,trapコマンドによる動作定義にシェル運用コマンドadshjavaを指定しないでください。ユーザー固有の後処理としてJavaのバッチアプリケーションを動かしたい場合,cjexecjobコマンドおよびcjkilljobコマンドを使用してください。
-
この特殊組み込みコマンドは,コマンドの構文を誤ってエラー終了すると,コマンドを実行しているシェルが終了します。
-
引数actionを省略し,引数methodに15を指定すると,trapコマンドはTerminateProcessなどによるプロセス即時終了に指定されたアクションをリセットし,何も設定されていない状態に戻ります。しかし,TERMだけを指定するとtrapコマンドはTerminateProcessなどによるプロセス即時終了に指定されたアクションをリセットしないで終了します。
- 例:trap 15
-
→TerminateProcessなどによるプロセス即時終了に指定されたアクションをリセットし,何も設定されていない状態に戻ります。
- 例:trap TERM
-
→アクションをリセットしません。
-
methodに2つ以上の値が指定された場合,その値にTERMまたは15が一回以上含まれるときは,KNAX6718-Iを出力しないで,TERMまたは15に対してactionを設定します。それ以外のmethodに対してはactionを設定しません。
例:「trap date 28 15」を実行した場合,KNAX6718-Iを出力しないで,15に対するactionとしてdateコマンドを設定します。
使用例
-
強制終了要求を受けた場合,echoコマンドで'trapped.'を出力します。
trap 'echo trapped.' TERM
-
強制終了要求に対して設定されているactionを表示します。actionを設定するtrapコマンドでmethodに15を指定しても,強制終了の方法にはTERMが出力されます。
ジョブ定義スクリプトの内容
trap 'echo trapped.' 15 trap
実行ジョブのSTDOUTファイルの内容
******** JOB SCOPE STDOUT ******** trap -- 'echo trapped.' TERM