36.9.1 COBOLが登録するシグナル
シグナルとは,ハードウェア,およびソフトウェアで発生する割り込みのことです。COBOLでは,-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれかを指定してコンパイルしたプログラムを実行する場合,次に示すシグナルを登録します。
-
SIGILL(無効な命令)
-
SIGIOT(abortによる異常終了)
-
SIGEMT(EMT命令)(AIXで有効)
-
SIGFPE(浮動小数点例外,算術演算エラー)
-
SIGBUS(バスエラー)
-
SIGSEGV(セグメンテーション違反)
なお,マルチスレッド対応COBOLプログラムでは,さらに次の二つが追加されます。これらは,システムのシグナルではなく,異常終了時要約情報リストに表示されるシグナル種別です。
-
RUNTIME ERROR(実行時エラーの発生)
-
CBLABN(CBLABNサービスルーチンの呼び出し)
COBOL以外のプログラムで上記シグナルを登録した場合,異常終了時の結果を保証できない場合があります。詳細は,「19.1 C言語との連携」を参照してください。
上記シグナルが発生した原因として,代表的なものを次に示します。
-
添字,または指標の値がOCCURS句で定義した範囲を超えた場合
-
部分参照で一意名の範囲を超えて参照した場合
-
呼び出すプログラムと呼び出されるプログラムとで引数の属性,長さ,数が不一致である場合
-
COBOL実行時エラーの発生,CBLABNサービスルーチンの呼び出し,またはCOBOLプログラム以外abortシステムコールを発行した場合
また,-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれかを指定してコンパイルされたCOBOLプログラムに,一度以上制御が渡り,上記のシグナル発生によって異常終了した場合,COBOLの戻り値は1になります。
割り込み発生条件が,COBOLによって変更されることはありません。