16.3.2 実行単位の終了コード
COBOLの実行単位が終了するときに返す終了コードについて説明します。
COBOLプログラムから終了コードを返すには,RETURN-CODE特殊レジスタを使用します。また,プログラムが異常終了した場合は,COBOL2002によって終了コードが設定される場合があります。
(1) RETURN-CODE特殊レジスタを使用する方法
呼び出し元の制御プログラムに終了コードを返すには,プログラムが終了する前にRETURN-CODE特殊レジスタに値を設定します。
- 指定例
MOVE 0 TO RETURN-CODE.
- 規則
-
-
RETURN-CODE特殊レジスタに設定できる値の範囲は,S9(9)の項目に設定できる値の範囲です。
-
ただし,このシステムで受け取れるRETURN-CODE特殊レジスタの値は,下位1バイト(8ビット)の内容です。
-
VOS3 COBOL85との動作と互換性を保つ必要がある場合は,RETURN-CODE特殊レジスタには,0〜4,095の範囲で設定してください。
-
終了コードの値は,プログラム終了時にRETURN-CODE特殊レジスタに設定されている値になります。ただし,COBOLプログラム中でRETURN-CODE特殊レジスタに値を設定した後,RETURNING指定のないCALL文を実行した場合は,呼び出し先プログラムの戻り値が終了コードとなります。
-
RETURN-CODE特殊レジスタに値を設定しないで,COBOLプログラムが正常終了した場合は,終了コードとして0が返されます。ただし,COBOLプログラムから他言語のプログラムを呼び出している場合,呼び出し先プログラムの戻り値※が終了コードに設定されます。
- 注※
-
void型のC言語プログラムを最後に呼び出すと,終了コードの値が不定となることがあります。
-
(2) プログラムが異常終了した場合の終了コード
プログラムが異常終了した場合,COBOL2002が終了コードを設定する場合があります。
- COBOL実行時エラーが発生した場合
-
-
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange,または-MultiThreadオプション指定ありのCOBOLプログラムの場合
終了コードには,1が設定されます。ただし,実行時環境変数CBLCOREに1を指定した場合,COBOLプログラムは,abort命令を発行して終了します。このため,プログラムの終了コードには,シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は,システムのヘッダファイル(signal.h)およびシステムのマニュアルを参照してください。
-
上記のコンパイラオプション指定なしのCOBOLプログラムの場合
COBOLプログラムは,abort命令を発行して終了します。このため,プログラムの終了コードには,シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は,システムのヘッダファイル(signal.h)およびシステムのマニュアルを参照してください。
-
- CBLABNサービスルーチンが実行された場合
-
-
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange,または-MultiThreadオプション指定ありのCOBOLプログラムの場合
終了コードには,1が設定されます。ただし,実行時環境変数CBLCOREに1を指定した場合,COBOLプログラムは,abort命令を発行して終了します。このため,プログラムの終了コードには,シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は,システムのヘッダファイル(signal.h)およびシステムのマニュアルを参照してください。
-
上記のコンパイラオプション指定なしのCOBOLプログラムの場合
COBOLプログラムは,abort命令を発行して終了します。このため,プログラムの終了コードには,シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は,システムのヘッダファイル(signal.h)およびシステムのマニュアルを参照してください。
-
- 上記以外のエラーが発生した場合
-
-
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange,または-MultiThreadオプション指定ありのCOBOLプログラムの場合
終了コードには,1が設定されます。ただし,実行時環境変数CBLCOREに1を指定した場合,COBOLプログラムは,abort命令を発行して終了します。このため,プログラムの終了コードには,シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は,システムのヘッダファイル(signal.h)およびシステムのマニュアルを参照してください。
-
上記のコンパイラオプション指定なしのCOBOLプログラムの場合
終了コードには,発生したシグナル別にOSが返す値が設定されます。
-
(3) 注意事項
-
COBOLプログラムが上位プロセスから起動される場合や,プログラム内でソフトウェアやハードウェアによって検出されて発生したシグナルを処理するプログラムがある場合,プログラムの終了コードは,それぞれ上位プロセス,および例外処理プログラムの戻り値となるため,(1)(2)の規則は適用されません。次に,(1)(2)の規則が適用されない例を示します。
-
テストデバッガのコマンド起動で,COBOLプログラムを実行した場合
(例)cblcv2k -Execute SAMPLE1
-
-
終了コードをシェルプログラミングで参照する場合,COBOLプログラムで設定したRETURN-CODE特殊レジスタの内容を終了コードとして参照できます。ただし,参照できる範囲は,RETURN-CODE特殊レジスタの下位8ビットの内容で,sh(Bシェル)は0〜255です。