概要
Note:
$ZF(-2) は非推奨の関数です。ここでは、既存のコードとの互換性についてのみ説明します。新しいコード開発ではすべて、$ZF(-100) を使用してください。
$ZF(-2) は、InterSystems IRIS プロセスによるホスト・オペレーティング・システムのプログラムまたはコマンドの呼び出しを許可します。$ZF(-2) は、program で指定されたオペレーティング・システム・コマンドを、現在のコンソールから生成された子プロセスとして実行します。この関数は非同期的に実行されます。子プロセスを生成したら直ちに返し、プロセスの終了を待機しません。入力と出力のデバイスは、NULL デバイスが既定になります。
$ZF(-2) は子プロセスの終了状態を返しません。その代わりに、子プロセスが正常に作成された場合、$ZF(-2) は 0 を返します。子プロセスがフォークできない場合は $ZF(-2) は -1 を返します。
$ZF(-2) は、生成された子プロセスからの応答を待機しないので、子プロセスの実行中でも InterSystems IRIS を正常にシャットダウンすることができます。
$ZF(-2) は、オペレーティング・システム・コマンドを実行する前に親プロセスの主デバイス ($PRINCIPAL で指定) を終了します。これは、子プロセスが親プロセスと同時に実行されるためです。$ZF(-2) が $PRINCIPAL を終了しなかった場合は、親と子からの出力が混ざり合います。$ZF(-2) の使用時に、子プロセスからの出力を回復させる場合は、コマンドで入出力をリダイレクトします。以下はその例です。
SET x=$ZF(-2,"ls -l > mydir.txt")
引数が指定されていない $ZF(-2) は、既定のオペレーティング・システム・シェルを起動します。詳細は、"コールアウト SDK の使用法" の “$ZF(-100) を使用したプログラムまたはシステム・コマンドの実行” を参照してください。
program で指定されたパス名にスペース文字が含まれる場合、パス名の処理はプラットフォームによって異なります。Windows および UNIX® の場合はパス名にスペース文字を使用することができますが、スペースを含むパス名は、追加の二重引用符 (“) で全体を囲む必要があります。これは、Windows の cmd /c 文に従っています。詳細は、Windows のコマンド・プロンプトで cmd /? を指定してください。
%Library.FileOpens in a new tab クラスの NormalizeFilenameWithSpaces()Opens in a new tab メソッドを使用すると、パス名内のスペースがホスト・プラットフォームに合わせて処理されるようにできます。
$ZF(-2) は、%System_Callout:U 特権を必要とする操作です。詳細は、"コールアウト SDK の使用法" の “%System_Callout:USE 特権の追加” を参照してください。
監査
$ZF(-2) を呼び出すたびに、OS コマンド監査レコードが監査ログに追加されます。このレコードには、以下のような情報が含まれます。
Execute O/S command Directory: c:\182u5\mgr\
Command: ls -lt 4002 - Detached
Detached キーワードは、呼び出しが $ZF(-2) であることを示します。$ZF(-1) 呼び出しは、このキーワードを取りません。