36.9.3 シグナルの登録と回復の注意事項
- 〈この項の構成〉
(1) COBOLがシグナルを登録する場合
-
プログラム実行中にシグナルが発生したとき,COBOLは異常終了を通知するCOBOLのメッセージ,および異常終了時要約情報リストを出力して,マルチスレッド対応COBOLプログラム動作時はスレッドを終了します。マルチスレッド対応COBOLプログラム以外ではプロセスを終了します。
-
COBOLプログラム以外でシグナルを登録し,その後,COBOLが同じシグナルを登録するとき,COBOLがシグナルを回復しないかぎり,先に登録していたシグナルのアクションには従いません。
(2) COBOLがシグナルを登録しない場合
-
プログラム実行中にシグナルが発生しても,異常終了を通知するCOBOLのメッセージ,および異常終了時要約情報リストは出力されません。プログラムの終了方法はシステムに依存します。
-
COBOLプログラム以外でシグナルを登録している場合は,登録時のアクションに従います。
(3) COBOLがシグナルを回復する場合
-
COBOLプログラムの終了時,COBOLは登録したシグナルをCOBOLプログラム実行前の状態に回復します。
-
CBLENDサービスルーチン呼び出し後,シグナルはCOBOLプログラム実行前の状態に回復しています。サービスルーチンの詳細は,「29. サービスルーチン」を参照してください。
(4) COBOLがシグナルを回復しない場合
-
COBOLプログラムの終了,またはCBLENDサービスルーチン呼び出し後,COBOLはシグナルを回復しません。
-
COBOLプログラム以外でシグナルを登録し,その後,COBOLが同じシグナルを登録するとき,先に登録していたシグナルの動作には従いません。
(5) マルチスレッド対応COBOLプログラムの場合
-
登録したシグナルは,すべてのスレッドで有効となります。
-
COBOLプログラムの終了時,COBOLは登録したシグナルを回復しません。このため,CBLENDサービスルーチン呼び出し後でも,シグナルはCOBOLが登録した状態です。
-
シグナルの動作は,プロセス内のすべてのスレッドに影響があります。
このため,次の順でシグナルが発生した場合,COBOLはシグナルをとらえ,異常終了を通知するCOBOLのメッセージを出力してシグナルが発生したスレッドを終了します。
-
スレッドで,-DebugInfオプション指定のプログラムを実行した。
-
1.以降,-DebugInfオプション指定のプログラムが動作していない別スレッドでシグナルが発生した。
-
(6) COBOL以外のプログラムでのシグナル登録(ユーザの設定)
-
COBOLプログラムの呼び出し終了後,シグナル発生時の動作を規定する必要があるときは,COBOL以外のプログラムでシグナルの再登録を行ってください。
-
-DebugInfオプションを指定したプログラムが実行されたときにCOBOLが登録するシグナルが,COBOL以外のプログラムで登録するシグナルに影響があるときは,プログラムの制御を変更するか,または-DebugInfオプションを指定しなければ回避できます。