Hitachi

Advanced Shell 


3.11.2 シグナル受信時の動作【UNIX限定】

通常実行時とデバッグ実行時の,ジョブコントローラがシグナルを受信した場合の動作を説明します。

〈この項の構成〉

(1) 通常実行時

通常実行時にジョブコントローラがシグナルを受信した場合の動作について,SIGTERMシグナルと,それ以外に分けて示します。

(a) SIGTERMの場合

SIGTERMを受信した場合の動作は環境設定パラメーターTRAP_ACTION_SIGTERMの指定に従います。

表3‒10 環境設定パラメーターTRAP_ACTION_SIGTERMにDISABLEを指定した場合※1

trapコマンドによる動作定義がない場合

trapコマンドによる動作定義がある場合

  • ルートジョブがSIGTERMを受信した場合

    1回目:メッセージを出力し,後処理を実行してから,後続処理を実行しないで終了します。このときJP1/AJSからの起動でない場合は,自分にSIGTERMを送信してシグナル終了します。

    2回目:即時終了します。

  • 子孫ジョブがSIGTERMを受信した場合

    SIGTERMを受信した子孫ジョブは,メッセージを出力し,後処理を実行してから,後続処理を実行しないで終了します。このとき自分にSIGTERMを送信してシグナル終了します。

    また,子孫ジョブの親ジョブは,子プロセスが終了コード「128+SIGTERMのシグナル番号」で終了した場合の動作に従って,後続処理を実行します。※2

trapコマンドで動作を定義できません。※3

注※1

環境設定パラメーターTRAP_ACTION_SIGTERMを指定しなかった場合も含みます。

注※2

子孫ジョブのシグナル受信時の動作の詳細については,「(3) シグナル受信時の子孫ジョブの動作」を参照してください。

注※3

trapコマンドでSIGTERMに対する動作を定義しようとすると,trapコマンドがエラーとなりジョブが終了します。

表3‒11 環境設定パラメーターTRAP_ACTION_SIGTERMにTERMを指定した場合

trapコマンドによる動作定義がない場合

trapコマンドによる動作定義がある場合

  • ルートジョブがSIGTERMを受信した場合

    1回目:メッセージを出力し,後処理を実行してから,後続処理を実行しないで終了します。このときJP1/AJSからの起動でない場合は,自分にSIGTERMを送信してシグナル終了します。

    2回目:即時終了します。

  • 子孫ジョブがSIGTERMを受信した場合

    SIGTERMを受信した子孫ジョブは,メッセージを出力し,後処理を実行してから,後続処理を実行しないで終了します。このとき自分にSIGTERMを送信してシグナル終了します。

    また,子孫ジョブの親ジョブは,子プロセスが終了コード「128+SIGTERMのシグナル番号」で終了した場合の動作に従って,後続処理を実行します

  • ルートジョブがSIGTERMを受信した場合

    メッセージを出力し,trapコマンドでSIGTERMに対して定義したアクションを実行します。アクションを実行した後は後続処理を実行しないで終了します。JP1/AJSからの起動でない場合は,自分にSIGTERMを送信してシグナル終了します。

  • 子孫ジョブがSIGTERMを受信した場合

    メッセージを出力し,trapコマンドでSIGTERMに対して定義したアクションを実行します。アクションを実行した後は後続処理を実行しないで終了します。

    また,子孫ジョブの親ジョブは,子プロセスがSIGTERMを受信した動作結果に従って,後続処理を実行します

注※

子孫ジョブのシグナル受信時の動作の詳細については,「(3) シグナル受信時の子孫ジョブの動作」を参照してください。

表3‒12 環境設定パラメーターTRAP_ACTION_SIGTERMにCONTを指定した場合

ジョブの起動方法

trapコマンドによる動作定義がない場合

trapコマンドによる動作定義がある場合

JP1/AJSから起動した場合

(カスタムジョブからの起動,または環境変数AJS_BJEX_STOPにTERMを設定した状態での起動)

ジョブ定義スクリプトを実行しないでジョブがエラー終了します(環境ファイル解析時のエラー)。

JP1/AJS以外から起動した場合

(上記以外の方法による起動)

  • ルートジョブがSIGTERMを受信した場合

    1回目:メッセージを出力し,後処理を実行してから,後続処理を実行しないで終了します。このとき自分にSIGTERMを送信してシグナル終了します。

    2回目:即時終了します。

  • 子孫ジョブがSIGTERMを受信した場合

    SIGTERMを受信した子孫ジョブの動作は,ルートジョブと同じです。

    また,子孫ジョブの親ジョブは,子プロセスが終了コード「128+SIGTERMのシグナル番号」で終了した場合の動作に従って,後続処理を実行します

  • ルートジョブがSIGTERMを受信した場合

    メッセージを出力し,trapコマンドでSIGTERMに対して定義したアクションを実行します。アクションを実行した後はジョブ定義スクリプトの後続処理を続行します。

  • 子孫ジョブがSIGTERMを受信した場合

    SIGTERMを受信した子孫ジョブの動作は,ルートジョブと同じです。

    また,子孫ジョブの親ジョブは,子プロセスがSIGTERMを受信した動作結果に従って,後続処理を実行します

注※

子孫ジョブのシグナル受信時の動作の詳細については,「(3) シグナル受信時の子孫ジョブの動作」を参照してください。

表3‒13 環境設定パラメーターTRAP_ACTION_SIGTERMにAUTOを指定した場合

ジョブの起動方法

trapコマンドによる動作定義がない場合

trapコマンドによる動作定義がある場合

JP1/AJSから起動した場合

(カスタムジョブからの起動,または環境変数AJS_BJEX_STOPにTERMを設定した状態での起動)

TERMを指定した場合と同じ動作です。

JP1/AJS以外から起動した場合

(上記以外の方法による起動)

CONTを指定した場合と同じ動作です。

(b) SIGTERM以外の場合

表3‒14 シグナル受信時の動作

シグナルの種類

trapコマンドによる動作定義がない場合

trapコマンドによる動作定義がある場合

終了要求シグナル

SIGHUP,SIGINT,SIGXCPU,SIGXFSZ,SIGQUIT,SIGUSR1,SIGUSR2,SIGPIPE,SIGALRM,SIGVTALRM,SIGPROF

  • ルートジョブがシグナルを受信した場合

    子孫プロセスの終了や一時ファイルの削除などの後処理を実行してから,後続命令を実行しないでシグナルによってエラー終了します。

  • 子孫ジョブがシグナルを受信した場合

    受信した子孫ジョブの動作はルートジョブ受信時と同じです。

    ここで受信した子孫ジョブの親のジョブは,終了した子孫ジョブの結果に従って,後続処理を実行します。※1

  • ルートジョブがシグナルを受信した場合

    trapコマンドで定義した動作に従います。

  • 子孫ジョブがシグナルを受信した場合

    受信した子孫ジョブの動作はルートジョブ受信時と同じです。

    ここで受信した子孫ジョブの親のジョブは,子孫ジョブの結果に従って,後続処理を実行します

常通知シグナル

SIGILL,SIGTRAP,SIGABRT,SIGFPE,SIGBUS,SIGSEGV,SIGSYS

  • ルートジョブがシグナルを受信した場合

    対象シグナルに対するOSのデフォルトの動作に従ってプログラムを終了します。

  • 子孫ジョブがシグナルを受信した場合

    受信した子孫ジョブの動作はルートジョブ受信時と同じです。

    ここで受信した子孫ジョブの親のジョブは,終了した子孫ジョブの結果に従って,後続処理を実行します。※1

  • ルートジョブがシグナルを受信した場合

    trapコマンドで定義した動作に従います。

  • 子孫ジョブがシグナルを受信した場合

    受信した子孫ジョブの動作はルートジョブ受信時と同じです。

    ここで受信した子孫ジョブの親のジョブは,子孫ジョブの結果に従って,後続処理を実行します

記以外

  • ルートジョブがシグナルを受信した場合

    対象シグナルに対するOSのデフォルトの動作に従います。

  • 子孫ジョブがシグナルを受信した場合

    受信した子孫ジョブの動作はルートジョブ受信時と同じです。

    ここで受信した子孫ジョブの親のジョブは,子孫ジョブの結果に従って,後続処理を実行します。※1

  • ルートジョブがシグナルを受信した場合

    trapコマンドで定義した動作に従います。※2

  • 子孫ジョブがシグナルを受信した場合

    受信した子孫ジョブの動作はルートジョブ受信時と同じです。

    ここで受信した子孫ジョブの親のジョブは,子孫ジョブの結果に従って,後続処理を実行します。

注※1

子孫ジョブのシグナル受信時の動作の詳細については,「(3) シグナル受信時の子孫ジョブの動作」を参照してください。

注※2

SIGKILLとSIGSTOPについては,trapコマンドで動作を定義できません

重要
  • trapコマンド使用時,動作に「-」を設定するとシグナル受信時の動作がデフォルトに戻ります。

  • デバッグ実行時の動作がこれらの表と異なるシグナルがあります。trapコマンドによる動作定義の有無とシグナルの動作の差異については,「(2) デバッグ実行時」を参照してください。

(2) デバッグ実行時

表3‒15 デバッグ実行時のシグナル受信時の動作

シグナルの種類

trapコマンドによる動作定義がない場合

trapコマンドによる動作定義がある場合

SIGINT

デバッガがジョブ定義スクリプトの実行を停止させて,デバッガのコマンド入力待ちとなります。

デバッガがジョブ定義スクリプトの実行を停止させて,デバッガのコマンド入力待ちとなります。

また,trapコマンドで定義した動作に従います。

SIGCHLD,

SIGTSTP,

SIGTTOU,

SIGURG,

SIGWINCH,

SIGIO,

SIGPWR

SIGSTKFLT,

リアルタイムシグナル

後続処理を続行します。

trapコマンドで定義した動作に従います

注※

ジョブ定義スクリプトの停止については,「6.2 CUIのデバッガ【UNIX限定】」を参照してください。