Uレベルのエラーが発生した場合に、完了コードに設定される値について教えてください。
NetCOBOLのよくあるご質問を検索できます。
- Uレベルのエラーが発生した場合に、完了コードに設定される値について教えてください。
- Uレベルのエラーが発生した場合、完了コードに設定される値は「134」です。
完了コードについては、以下のマニュアルを参照してください。
NetCOBOL メッセージ説明書- 第3章 実行時メッセージ
表3-1 実行時メッセージの重大度コードの意味と完了コードへの影響
補足
現在のCOBOLランタイムシステムは、Uレベルエラーを検出してメッセージ等の出力を終えた後、abort()関数を発行しています。abort()関数は、呼び出し元のプロセスにSIGABRTシグナルを送信します。
完了コードは、シグナルを受信した側、つまり、完了コードを参照する側の仕様に依存します。例えば、プロセスがシェル(Bシェル系、Cシェル系)から起動されている場合は、その仕様に依存して完了コードが決まります。次表に示すように意味が予約されています。
詳細は、各シェルのマニュアルを参照してください。
完了コードの意味 完了コード 説明 0 シェルスクリプトの実行で、成功した 1~125 スクリプトで使用可能 126 コマンドは見つかったが、ファイルを実行できなかった場合 127 コマンドが見つからなかった場合 128以上 シグナル番号Nを受け取った場合、完了コードは 128+N の値となる
注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). */ - 第3章 実行時メッセージ
製品・サービス情報 |
|
||||
---|---|---|---|---|---|
アンサー種別 | 技術サポート |