4.4.5 バッチジョブおよびジョブネットの強制終了
(1) 強制終了の方法
(a) JP1/AJSから直接バッチジョブを実行している場合
JP1/AJSの操作によって実行中のバッチジョブ実行システムのバッチジョブおよびジョブネットを強制終了できる。強制終了の指示を受けたジョブコントローラは,実行中のジョブステップのプロセスを強制終了する。また,強制終了の指示を受けたジョブネットは,新たなジョブを起動しなくなり,ジョブネット内の実行中のジョブすべてを強制終了する。この操作は,次に示すウィンドウまたはajskillコマンド,もしくはjpqjobcanコマンドで操作できる。
-
[デイリースケジュール(階層表示)]ウィンドウ
-
[JP1/AJS3 - View]ウィンドウ
-
[マンスリースケジュール]ウィンドウ
-
[ジョブネットモニタ]ウィンドウ
ウィンドウによる強制終了またはajskillコマンドの詳細については,JP1のマニュアルを参照のこと。
上記の操作で強制終了をした場合,JP1/AJSで確認できるジョブの状態は,「強制終了」となる。また,ジョブログを含むジョブコントローラの標準エラー出力の一部または全体が,JP1/AJSから参照できないおそれがある。このときジョブの実行結果を確認するには,スプール内のジョブログを参照すること。
(b) JP1/AJSから直接バッチジョブを実行していない場合,およびコマンドラインから起動している場合
ユーザが直接taskkillコマンドなどでバッチジョブを終了させる必要がある。このとき,bjexec.exeプロセスだけ終了させなければならない。bjexecsub.exeプロセスを終了させた場合,一時ファイルの削除や世代ファイルの更新などの後処理がされない。
bjexec.exeプロセスのプロセスIDはbjexlslockコマンドのPPIDの列に出力される。bjexlslockコマンドでbjexec.exeプロセスのプロセスIDを参照し,taskkillコマンドなどで終了させること。bjexlslockコマンドでプロセスIDを調べ,バッチジョブを強制終了する例を次に示す。
> bjexlslock JOBID STATUS ELAPSED PID PPID JP1JobID JOBNAME ------ ------ -------- ---------- ---------- ---------- -------------------- 000907 LOCK 00:01:23 3188 3128 0000001270 SAMPLE > taskkill /F /PID 3128
ただし,bjexlslockコマンドでbjexec.exeプロセスのプロセスIDが出力されるのは,排他/共用制御が適用されるDD要素が指定されているジョブだけである。詳細は「3.10 ジョブ単位のファイルおよびディレクトリに対する排他/ 共用制御機能」を参照のこと。
それ以外のジョブについては,OSの機能などを利用してプロセスIDを調べること。
バッチジョブのジョブログをファイルにリダイレクトしている場合,bjexec.exeプロセスをtaskkillコマンドなどで終了させると,バッチジョブのジョブログがファイルに最後まで出力されないことがある。Advanced Shellはデフォルトでジョブログをファイルにリダイレクトしているため,必要に応じてAdvanced Shellの出力モードの設定を変更すること。
また,JP1/AJSから強制終了した場合,バッチジョブの親プロセスによってはバッチジョブが終了され一時ファイルの削除や世代ファイルの更新などの後処理がされないことがある。例えば,batファイルは終了されたとき子プロセスに何もしないため,バッチジョブが終了されることはない。Advanced Shellは終了されたとき子プロセスを終了させるため,ジョブステッププロセスを含めバッチジョブを終了させられる。
JP1/AJSから直接バッチジョブを実行しない場合は注意が必要である。
(2) バッチジョブ実行システムがジョブステップのプロセスを終了させる方法
バッチジョブ実行システムは,次の方法でジョブステップのプロセスを強制終了する。
(a) EXEC要素のLANG属性がJavaの場合
cjkilljobコマンドを呼び出し,バッチアプリケーションを強制終了する。cjkilljobコマンドについては,マニュアル「Cosminexus アプリケーションサーバ V8 リファレンス コマンド編」を参照のこと。
(b) EXEC要素のLANG属性がJava以外の場合
ジョブステップのジョブオブジェクトに対してWin32(R) APIのTerminateJobObject関数を実行し,ジョブステップのプロセスを強制終了する。TerminateJobObject関数の仕様については,Windowsの資料を参照のこと。