8.5.6 ジョブの終了コードを確認する

ジョブの終了コードは,JP1/AJS2 - Viewの[モニタ詳細‐[アイコン名]]ダイアログボックス,またはjpqjobgetコマンドのEXITCODEなどで確認できます。ジョブの終了コードには,通常,正常終了では「0」,異常検出終了では起動したジョブプロセスの終了コードが設定されます。

しかし,次の表に示す場合では,JP1/AJS2によって終了コードが設定されます。

表8-21 JP1/AJS2によって終了コードが設定される条件とその終了コード

条件JP1/AJS2によって設定される終了コード
PCジョブ,UNIXジョブ,アクションジョブ,カスタムジョブ,またはJP1/AJS2をホストに指定したQUEUEジョブで,次の状態になる場合。
  • 起動失敗
  • 強制終了(打ち切り時間指定による打ち切り終了も含みます)
  • 異常検出終了
「-1」を設定します。
UNIXジョブで,JP1/AJS2で予期しないエラーが発生した場合。「255」を設定します。
注※
ジョブプロセスが終了したあとのJP1/AJS2側の後処理で何か問題が発生した場合(例えば,マネージャーホストへの結果ファイルの転送失敗など)は,ジョブプロセスのリターンコードが,JP1/AJS2によって「-1」で上書きされて異常検出終了になります。
注意
PCジョブの場合は,起動したジョブプロセス自身がリターンコードとして「-1」を返すこともできます。また,UNIXジョブでは負の値で終了すると,終了コードは,256 + 負の値と扱われます。例えば,ジョブプロセスが「-1」で終了した場合,終了コードは,256 - 1 = 255となります。したがって,ジョブプロセスによって設定された終了コードなのか,JP1/AJS2によって設定された終了コードなのかを判別する必要がある場合は,ユーザーアプリケーションなどで設定する終了コードには,「-1」および「255」を使用しないようにしてください。

また,イベントジョブおよびアクションジョブが,実行しているとき(ジョブプロセスが起動されてから終了するまで)に設定される終了コードについては,「付録G イベントジョブおよびアクションジョブ実行時の戻り値一覧」を参照してください。

ジョブの終了コードには,ユーザーアプリケーションやJP1/AJS2以外にOSが設定するものがあります。代表的な終了コードを次の表に示します。これらの終了コードはOSのアップグレードなどによって変更になる場合もありますので,使用しているOSの技術情報を確認してください。

表8-22 OSが設定するジョブの終了コードの例

OS終了コード原因対処方法
Windows259または-1結果ファイルのオープンに失敗していることが考えられます。この場合は,同時に次に示すどちらかのメッセージが出力されます。
  • 「KAVU3284-W 内部処理(論理ホスト名)でシステムコールエラーが発生しました(要因個所:要因個所,要因番号1:0x2013000a,システムコール名:CreateFile,要因番号2:要因番号2)」
  • 標準エラー出力に「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
ジョブとして実行するプログラム内でオープンするファイル,またはバッチファイル内のリダイレクションでオープンするファイルを,ジョブを登録するときの標準出力ファイル,または標準エラー出力ファイルとして指定しないでください。ただし,プログラム内で関数を使用してオープンする場合に限って,共有の読み取りまたは共有の書き込みを許可する設定でオープンすることによって回避することもできます。
128デスクトップヒープの領域不足が考えられます。この場合は,同時に次に示すどちらかのメッセージが出力されます。
  • 「XXXX.XXX - アプリケーションエラー:アプリケーションを正しく初期化できませんでした。」
  • 「XXXX.XXXの初期化に失敗しました。」
デスクトップヒープ領域の消費を少なくしたい場合は,ジョブを実行するユーザーのアカウントを,「JP1/AJS2サービス」のアカウントと同じにして運用してください。
UNIXシグナル番号+128ジョブプロセスから起動したプログラムがシグナルを受信したことが考えられます。次に示すどちらかの方法で対処してください。
  • ジョブプロセスから起動するプログラムがシグナルを受信しないようする。
  • ジョブプロセスから起動するプログラムにシグナルハンドラーなどを設定して,シグナルの種類によって終了コードを切り分けるなどの処理を追加する。
注※
ジョブプロセス自身がシグナルを受信すると,終了コードは「-1」でジョブが強制終了になります。