終了コードおよび実行結果の正常・異常について説明します。
(1) ジョブの終了コード
ジョブの終了コードは最後に実行したジョブ定義スクリプトの終了コードになります。
JP1/Advanced Shellはジョブの実行結果について正常・異常を区別しません。終了コードをJP1/AJSなどにそのまま返します。
ただし,ジョブの中でエラーが発生していた場合は,エラーメッセージを出力します。
(2) ジョブステップの終了コード
ジョブステップの終了コードは,ジョブステップ正常ブロック内で最後に実行したコマンドの終了コードになります。ただし,ジョブステップエラーブロックでexitコマンドに引数を指定して実行すると,exitコマンドの引数をジョブステップの終了コードにできます。それ以外でジョブステップエラーブロック内で実行したコマンドの終了コードは,ジョブステップの終了コードに影響しません。ジョブステップの正常終了およびエラー終了について説明します。
なお,ジョブステップ正常ブロック内で,引数に外部コマンドを指定したexecコマンドを実行した場合は,ジョブステップの終了コードがexecコマンド実行直前の終了コードとなります。
(3) コマンドの終了コード
コマンドの終了コードは,各コマンドで定められた終了コードになります。
コマンドがリターンできる値の範囲は,プラットフォームやコマンドを記述したプログラム言語の言語仕様などによって異なりますが,0~255とすることを推奨します。この範囲を超えた場合,JP1/Advanced Shellでは,次に示す値をコマンドの終了コードとして扱います。
表5-38 例外として扱う例外コードと意味
項番 | 例外コード | 意味 |
---|---|---|
1 | 0xC0000005 | スレッドがアクセス権を持っていない仮想アドレスへアクセスしようとしました。 |
2 | 0x80000003 | ブレークポイントに到達しました。 |
3 | 0x80000002 | メモリアクセスに関してアライメント規約の存在するハードウェア上で,ミスアライメントされたデータにアクセスしました(例えば,16ビット値が2バイト境界にまたがったり,32ビット値が4バイト境界にまたがったりすることはできません)。 |
4 | 0x80000004 | トレースまたはシングルステップ機構による1命令ごとの実行です。 |
5 | 0xC000008C | スレッドが配列の範囲外にアクセスしようとしたことが,ハードウェアによって検出されました。 |
6 | 0xC000008D | 浮動小数点演算で,オペランドのうち少なくとも1つが非正規化数(普通の浮動小数点フォーマットでは表現できないほど小さな値)です。 |
7 | 0xC000008E | スレッドが,浮動小数点演算で0による除算をしようとしました。 |
8 | 0xC000008F | 浮動小数点演算の結果,正確な値が計算できませんでした。 |
9 | 0xC0000030 | この表に列挙した以外の浮動小数点演算の例外です。 |
10 | 0xC0000091 | 浮動小数点演算の結果,指数部の値が制限範囲を超えました。 |
11 | 0xC0000032 | 浮動小数点演算の結果,スタックがオーバーフローまたはアンダーフローを起こしました。 |
12 | 0xC0000033 | 浮動小数点演算の結果,指数部の値が制限範囲を下回りました。 |
13 | 0xC0000094 | スレッドが,整数演算で0による除算をしようとしました。 |
14 | 0xC0000035 | 整数演算の結果,オーバーフローが発生しました。 |
15 | 0xC0000096 | 現在のマシンモードでは実行できない命令(特権命令)を実行しようとしました。 |
16 | 0xC0000025 | 継続できない例外を起こした命令に対して,再実行を試みました。 |
コマンドの実行結果が,次の表のどれかに該当する場合,そのコマンドがエラー終了したと見なします。
コマンド実行結果 | 終了コード |
---|---|
コマンドの終了コードが0ではない場合(successRC属性で値を変更可能) | コマンドの終了コード |
コマンドがシグナル終了した場合 | コマンドが定めるシグナル終了時の終了コード |
指定されたコマンドに実行権限がなく,実行できなかった場合 | 126 |
指定されたコマンドが存在しないで,実行できなかった場合 | 127 |
なお,次のコマンドは終了コードに関係なくエラーにはなりません。
(4) 注意事項
UNIX互換コマンドおよびユーザーが作成したコマンドは,正常終了してもコマンドの終了コードが0ではない場合があります。例えば,diffコマンドは比較したファイルが異なるとき,終了コードが1となります。このようなコマンドについては,正常かエラーかの判定が正しく行われるように,次の方法でジョブ定義スクリプトを記述してください。
UNIX互換コマンドの終了コードの詳細については,「8.4 UNIX互換コマンド」を参照してください。