CBL_EXEC_RUN_UNIT

同期実行単位または非同期実行単位を作成する。

構文:

call "CBL_EXEC_RUN_UNIT" using        command-line
                         by value     command-line-len
                         by reference run-unit-id
                         by value     stack-size
                         by value     flags
                         returning    status-code

パラメーター:

  呼び出しプロトタイプ使用時 (「説明の読み方」を参照) PIC
command-line pic x(n) pic x(n)
command-line-len cblt-os-size pic x(4) comp-5

または

pic x(8) comp-5 (64 ビットのネイティブ プログラムのみ)

run-unit-id cblt-x8-comp5 pic x(8) comp-5
stack-size cblt-os-size pic x(4) comp-5

または

pic x(8) comp-5 (64 ビットのネイティブ プログラムのみ)

flags cblt-os-flags pic x(4) comp-5

または

pic x(8) comp-5 (64 ビットのネイティブ プログラムのみ)

status-code 説明の読み方」を参照

入力パラメーター:

command-line
生成する実行単位に渡すコマンド。プログラム名およびそれに続くパラメーター。
line-length
コマンド ラインの長さ。
stack-size
本パラメーターは無視される。
flags
新しい実行単位の作成方法を示す、以下のいずれかのワード。
ビット 0
0 CBL_EXEC_RUN_UNIT は、子プロセスを作成すると直ちに呼び出しプロセスに戻る。
1 CBL_EXEC_RUN_UNIT は、新しい実行単位が完了するまで待ってから呼び出しプロセスに戻る。
ビット 1
0 新しく作成された実行単位は、作成時点で呼び出しプロセス内に存在するすべての COBOL スイッチ、ランタイム スイッチ、環境変数、およびオープン ライブラリを継承する。
1 新しく作成された実行単位は、作成時点で呼び出しプロセス内に存在するすべての環境変数のみを継承する。
ビット 2
0 新しく作成された実行単位は、呼び出し側の画面入出力用のコンソールを継承する。本コンソールに一度にアクセスできるのは、実行単位セットの 1 メンバーのみ。そうでない場合は予期せぬ結果が生じる可能性がある。
注: 最初の実行単位と、そこから生成された下位の全実行単位は「実行単位セット」と総称される。
1 新しく作成された実行単位には、端末入出力用の新しいコンソールが割り当てられる。本コンソールは親プロセスからは独立していて、画面入出力用に使用できる。
上記以外のビット
予約済み。ゼロに設定する必要がある。

出力パラメーター:

run-unit-id
flags にビット 0 を設定していない場合は、生成された実行単位の OS プロセス ID が格納される。ビット 0 を設定すると、この値は変更されない。
status-code
処理状態を示すコード。
0 成功
157 メモリ不足
181 無効なパラメーター
200 Windows:実行単位でランタイム エラーが発生したか、呼び出し先のプログラムが見つからなかったか、内部論理エラーが発生した
255 UNIX:実行単位でランタイム エラーが発生したか、呼び出し先のプログラムが見つからなかった
その他の 0 以外のコード 実行されたプログラムからの戻りエラー コード

説明:

このルーチンを呼び出す実行単位は「親」と呼ばれ、この呼び出しで作成される実行単位は「子」と呼ばれる。子は作成されると、親から特定の属性を継承する。これらの属性は、呼び出しが行われた時点で親から子にコピーされる。それ以降に親の該当属性に変更が加えられても、子の属性には変更は反映されない。同様に、子の属性に加えられた変更は、親の属性には影響を与えない。

flags のビット 1 は、親のどの属性を子が継承するかを制御する。

.NET 環境では、このコマンドで作成された実行単位は、いずれの COBOL スイッチ、ランタイム スイッチ、および環境変数も継承されない。CBL_EXEC_RUN_UNIT は、作成する実行単位用のライブラリを開かない。

最初の実行単位と、そこから作成された下位の全実行単位は実行単位セットと総称される。

実行単位を操作する際には、次の点に留意する。

  • 子の実行単位に含まれるすべての COBOL プログラムは、子の生成直後には初期状態になる。
  • 複数の実行単位間ではデータを共有できる。データ共有を行うには、CBL_ALLOC_MEM または CBL_ALLOC_SHMEM を使用してメモリ領域を割り当ててから、その領域のアドレスを CBL_PUT_SHMEM_PTR と CBL_GET_SHMEM_PTR を使って実行単位間でやり取りをする。
  • 開いているファイルとヒープは、親から継承されない。
  • 複数の実行単位が並行して画面入出力を行うと相互干渉が生じ、予期しない結果を引き起こす可能性がある。この問題は特に UNIX で発生するが、Windows でもコンソールが複数のプロセスで共有されている場合にはこの問題が起こりうる。そのため、画面入出力を行う実行単位は常に 1 つに限定すべきである。

32 ビットまたは 64 ビットのアドレス空間を使用するプログラムの両方を開発できる UNIX プラットフォームでは、実行単位セット内で使用されるアドレス空間を統一する必要がある。

32 ビットの実行単位から 64 ビットの実行単位を生成すると、属性はまったく継承されない。64 ビットの実行単位から 32 ビットの実行単位を生成する場合も同様。どちらの場合も、生成された子の実行単位は、新しい実行単位セットの最上位の実行単位として扱われる。