JP1/Advanced Shell
- <この項の構成>
- (1) 強制終了の方法
- (2) Ctrl+Cなどの操作に関する注意事項【Linux限定】
(1) 強制終了の方法
ジョブの強制終了は,次の方法で行います。
- JP1/AJSからジョブを起動している場合,JP1/AJSの強制終了操作を実行します。
JP1/AJSからWindowsまたはUNIXで実行されたジョブアイコンのジョブを強制終了する場合,環境変数AJS_BJEX_STOP=TERMを設定しておく必要があります。WindowsまたはUNIXで実行されたジョブアイコンのジョブの詳細については,「2.8 ジョブネットを定義して実行する」を参照してください。
- adshexecコマンドのプロセスに対して,終了シグナルを送付します。Windowsの場合は,taskkillコマンドなどを用いてadshexecのプロセスを終了させます。
ジョブを強制終了すると,ジョブコントローラは実行中の子孫プロセスに対してSIGTERMを送付(Windowsの場合は,TerminateProcess関数およびTerminateJobObject関数によるプロセス終了)したあと,割り当てたファイルの後処理をして後続のジョブステップ・コマンドを一切実行しないで終了します。後続ジョブステップのrun属性にabnormalやalwaysが指定されていても実行しません。このとき,UNIXではadshexecコマンドがシグナルによってエラー終了します。UNIXでのSIGTERM受信時のジョブの動作については「3.9.2 シグナル受信時の動作【UNIX限定】」,Windowsでの強制終了時のジョブの動作については「3.9.3 強制終了時のジョブの動作【Windows限定】」を参照してください。
なお,Windowsで子孫プロセスを強制終了した場合,子孫プロセスのリターンコードは無条件に1になります。
- 注意
- Windowsの場合,adshexecコマンドの起動時にadshexecsubコマンドを合わせて起動します。adshexecコマンドを強制終了すれば,adshexecsubコマンドも終了します。
- adshexecsubコマンドを強制終了しないでください。adshexecsubコマンドを強制終了した場合,実行中の子孫プロセスは終了されません。また,一時ファイルが残ったままとなる場合があります。このような場合は,taskkillコマンドやタスクマネージャーを使用して子孫プロセスを強制終了させ,一時ファイルを手動で削除してください。
- 注意
- Windows環境のJP1/Advanced Shellでは,孫プロセスの強制終了のためにジョブオブジェクトを使用しているため,次の2点に注意してください。
- JP1/Advanced Shellから生成した子プロセスをジョブオブジェクトに関連づけることはできません。
- JP1/Advanced Shellのプロセスが,すでにジョブオブジェクトに関連づけられていた場合,ジョブの強制終了でJP1/Advanced Shellの子プロセスが生成したプロセスは終了しません。
(2) Ctrl+Cなどの操作に関する注意事項【Linux限定】
環境ファイルにCHILDJOB_SHEBANGパラメーターを指定して,ログインシェルからジョブを実行した場合,ルートジョブ,子孫ジョブ,およびほかに起動した外部コマンドを「Ctrl+C」や「Ctrl+\」などの操作で一度に強制終了させることができないときがあります※。これらのジョブおよびコマンドを一度にすべて強制終了させたいときは,ログインシェル直下のルートジョブに対して,killコマンドでSIGTERMなどの終了要求シグナルを送信してください。
- 注※
- CHILDJOB_SHEBANGパラメーターを指定している場合,adshexecコマンドのプロセスとその子プロセスとが,別々のプロセスグループになります。そのため,ログインシェルからジョブを実行中に「Ctrl+C」や「Ctrl+\」などの操作を実行した場合,現在フォアグラウンドにいるプロセスグループに対してだけ,SIGINTやSIGQUITが送られます。
- シグナルを受信したジョブの子孫プロセスとして動作するジョブおよび外部コマンドは強制終了されますが,親プロセスやそれより上位のプロセスとして動作するジョブおよび外部コマンドは強制終了されません。
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.