4.3 バッチジョブの強制終了
ジョブの強制終了には次の2とおりの方法があります。
JP1/AJSからジョブを起動している場合,JP1/AJSの強制終了操作を実行します。
JP1/AJSからWindowsまたはUNIXで実行されたジョブアイコンのジョブを強制終了する場合,環境変数AJS_BJEX_STOP=TERMを設定しておく必要があります。WindowsまたはUNIXで実行されたジョブアイコンのジョブの詳細については,「3.1.1 ジョブネットを定義して実行する」を参照してください。
adshexecコマンドのプロセスに対して,終了要求シグナルを送付します。Windowsの場合は,taskkillコマンドなどを用いてadshexecのプロセスを終了させます。
ジョブを強制終了すると,ジョブコントローラは実行中の子プロセスまたは子孫プロセスを強制終了します。詳細は,「4.3.1 子プロセスまたは子孫プロセスの強制終了」を参照してください。
子プロセスまたは子孫プロセスを強制終了したあと,割り当てたファイルの後処理をして後続のジョブステップ・コマンドを一切実行しないで終了します。後続ジョブステップのrun属性にabnormalやalwaysが指定されていても実行しません。ジョブを強制終了すると,UNIXではadshexecコマンドがシグナルによってエラー終了します。UNIXでのSIGTERM受信時のジョブの動作については,マニュアル「JP1/Advanced Shell」の「シグナル受信時の動作」の説明を参照してください。Windowsでの強制終了時のジョブの動作については,マニュアル「JP1/Advanced Shell」の「強制終了時のジョブの動作」の説明を参照してください。
- 注意事項
Windowsの場合,adshexecコマンドの起動時にadshexecsubコマンドをあわせて起動し,adshexecコマンドを強制終了すればadshexecsubコマンドも終了します。そのため,adshexecsubコマンドは強制終了しないでください。adshexecsubコマンドを強制終了すると,次の現象が発生する場合があります。
実行中の子孫プロセスが終了されません。
一時ファイルが残ったままとなる場合があります。
これらの現象が発生した場合は,taskkillコマンドやタスクマネージャーを使用して子孫プロセスを強制終了させ,一時ファイルを手動で削除してください。
- 注意事項
Windows環境のJP1/Advanced Shellでは,孫プロセスの強制終了のためにジョブオブジェクトを使用しているため,次の2点に注意してください。
JP1/Advanced Shellから生成した子プロセスをジョブオブジェクトに関連づけることはできません。
JP1/Advanced Shellのプロセスが,すでにジョブオブジェクトに関連づけられていた場合,ジョブの強制終了でJP1/Advanced Shellの子プロセスが生成したプロセスは終了しません。
- 注意事項
Windowsでは,子孫プロセスを生成する外部コマンドを実行するジョブを強制終了した場合,孫以下のプロセスが同時に256個以上存在すると,メッセージKNAX6381-Eを出力してスプールジョブディレクトリの名称変更が失敗することがあるため,次の3点に注意してください。
失敗したスプールジョブディレクトリを参照する場合は,直後のメッセージKNAX6382-Iに出力されるディレクトリ名を参照してください。
名称変更に失敗したスプールジョブディレクトリはadshhkコマンドでは削除されません。削除する場合は,手動で削除してください。
実行環境でスプールジョブディレクトリの名称変更に失敗したジョブは,adshevtoutコマンドでジョブ定義スクリプト稼働実績情報を出力しません。