Uレベルのエラーが発生した場合に、完了コードに設定される値について教えてください。

Uレベルのエラーが発生した場合に、完了コードに設定される値について教えてください。
Uレベルのエラーが発生した場合、完了コードに設定される値は「134」です。
完了コードについては、以下のマニュアルを参照してください。
NetCOBOL メッセージ説明書
  • 第3章 実行時メッセージ
     表3-1 実行時メッセージの重大度コードの意味と完了コードへの影響

補足

現在のCOBOLランタイムシステムは、Uレベルエラーを検出してメッセージ等の出力を終えた後、abort()関数を発行しています。abort()関数は、呼び出し元のプロセスにSIGABRTシグナルを送信します。
完了コードは、シグナルを受信した側、つまり、完了コードを参照する側の仕様に依存します。

例えば、プロセスがシェル(Bシェル系、Cシェル系)から起動されている場合は、その仕様に依存して完了コードが決まります。次表に示すように意味が予約されています。
詳細は、各シェルのマニュアルを参照してください。


完了コードの意味
完了コード 説明
0 シェルスクリプトの実行で、成功した
1~125 スクリプトで使用可能
126 コマンドは見つかったが、ファイルを実行できなかった場合
127 コマンドが見つからなかった場合
128以上 シグナル番号Nを受け取った場合、完了コードは 128+N の値となる
注1) 完了コードに設定できる最大値は、「255」です。
注2) COBOLでよく発生するシグナルを以下に示します。
  • SIGILL シグナル
    シグナル番号は 4 になりますので、完了コードは、128 + 4 = 132 となります。
  • SIGABRT シグナル
    シグナル番号は 6 になりますので、完了コードは、128 + 6 = 134 となります。
  • SIGBUS シグナル
    シグナル番号は 10 になりますので、完了コードは、128 + 10 = 138 となります。
  • SIGSEGV シグナル
    シグナル番号は 11 になりますので、完了コードは、128 + 11 = 139 となります。

Uレベル以外の場合は、PROGRAM-STATUSの値が完了コードの値となります。
PROGRAM-STATUSに値を設定していなければ、完了コードに0が設定されます。
COBOLプログラム実行時、Eレベルのエラーが発生すると完了コードには12が設定されます。ただし、PROGRAM-STATUSに12より大きい値を設定していた場合PROGRAM-STATUSの値が完了コードに設定されます。

【参考】シグナル番号について
Solaris版
<SIGNAL番号の定義>
「/usr/include/sys/signal.h」を参照すると、シグナル番号の定義は、「/usr/include/sys/iso/signal_Iso.h」にあることがわかります。

SIGABRTのシグナル番号の値は 6 です。
   #define SIGABRT 6       /* used by abort, replace SIGIOT in the future */

Linux版、Linux Itanium版
<SIGNAL番号の定義>
「/usr/include/sys/signal.h」を参照すると、シグナル番号の定義は、「/usr/include/bits/signum.h」にあることがわかります。

SIGABRTのシグナル番号の値は 6 です。
  #define SIGABRT         6       /* Abort (ANSI).  */
製品・サービス情報
対象製品NetCOBOL
プラットフォームSolaris, Linux x86, Linux Intel64, Linux Itanium
アンサー種別 技術サポート
このページの先頭へ