COBOL2002 使用の手引 手引編

[目次][用語][索引][前へ][次へ]

36.9 シグナル

<この節の構成>
(1) COBOLが登録するシグナル
(2) シグナルの登録と回復
(3) シグナルの登録と回復の注意事項
(4) プロセスの終了
(5) プログラム実行時にシグナル登録しない環境変数CBLEXCEPT

(1) COBOLが登録するシグナル

シグナルとは,ハードウェア,およびソフトウェアで発生する割り込みのことです。COBOLでは,-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれかを指定してコンパイルしたプログラムを実行する場合,次に示すシグナルを登録します。

なお,マルチスレッド対応COBOLプログラムでは,さらに次の二つが追加されます。これらは,システムのシグナルではなく,異常終了時要約情報リストに表示されるシグナル種別です。

COBOL以外のプログラムで上記シグナルを登録した場合,異常終了時の結果を保証できない場合があります。詳細は,「19.1 C言語との連携」を参照してください。

上記シグナルが発生した原因として,代表的なものを次に示します。

また,-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれかを指定してコンパイルされたCOBOLプログラムに,一度以上制御が渡り,上記のシグナル発生によって異常終了した場合,COBOLの戻り値は1になります。

割り込み発生条件が,COBOLによって変更されることはありません。

(2) シグナルの登録と回復

-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションと-MultiThreadオプション(マルチスレッド対応COBOLプログラム)指定によるシグナルの登録と,COBOLプログラム終了時のシグナルの回復について,次に示します。

コンパイラオプション COBOLのシグナル登録/回復
-DebugInf
-DebugInf,Trace
-DebugCompati
-DebugData
-TDInf
-CVInf
-DebugRange
-MultiThread シグナル登録 シグナル回復
あり あり 登録あり
シグナルは,すべてのスレッドで有効
回復なし
なし※2 登録あり 回復あり
なし※1 登録なし
あり/なしが混在 あり 登録あり
シグナルは,すべてのスレッドで有効
回復なし
なし※2 登録あり※3 回復あり※3

(凡例)
−:該当しない

注※1
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションを指定しないプログラムだけが動作した場合です。

注※2
-MultiThreadオプションを指定しないマルチスレッド非対応のCOBOLプログラムだけが動作した場合です。

注※3
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプション指定プログラムが初めて動作したときにCOBOLがシグナルを登録し,COBOLプログラム終了時シグナルが回復します。

(3) シグナルの登録と回復の注意事項

(a) COBOLがシグナルを登録する場合
(b) COBOLがシグナルを登録しない場合
(c) COBOLがシグナルを回復する場合
(d) COBOLがシグナルを回復しない場合
(e) マルチスレッド対応COBOLプログラムの場合
(f) COBOL以外のプログラムでのシグナル登録(ユーザの設定)

(4) プロセスの終了

異常終了時要約情報リストを出力後,プロセスは終了コード1で終了します。

(5) プログラム実行時にシグナル登録しない環境変数CBLEXCEPT

この環境変数にNOSIGNALを指定すると,デバッグ用コンパイラオプション-DebugInf, -DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange のどれかを指定したプログラムの実行中にシグナル登録をしません。

このため,異常終了要因となるシグナルが発生しても,デバッグ情報は出力しません。終了方法は,制御プログラムの終了処理に依存します。

制御プログラムの終了処理を次に示します。