JOBコマンドは、名前が付いたルーチンを別のGT.Mプロセスで実行を開始します。
$ZJOBは、JOBコマンドで作成されたプロセスのPIDをセットします。詳細な情報と使用例については、 “$ZJob”を参照してください。
JOBコマンドのフォーマットは:
J[OB][:tvexpr] entryref[(expr[,...])] [:[(keyword[=value][:...])][:numexpr]][,...]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
必要な入口参照(entryref)は、新しいプロセスが開始する位置を指定します。
括弧() で囲まれたオプションのパラメータリストは、ルーチンのエントリポイントに渡すパラメータが含まれています。
もし JOB がパラメータリストを指定している場合、入口参照(entryref)の位置は、ラベルとフォーマルリスト(formallist)で始まる必要があります。Mは、パラメータパッシング時に、オフセット付きの入口参照(entryrefs)を禁止します。
パラメータリストにあるオプションの要素は、JOBが評価して値として渡す式を指定します;JOBコマンドは新しいプロセスを作成するために、その引数は、参照渡し(pass-by-reference)を指定できません。
キーワードは、新しいプロセスの環境のアスペクト(様相)を制御するオプションのプロセスパラメータ(processparameter)を指定します。
もしJOBコマンドが1つだけプロセスパレメータ(processparameter) を持つ場合は、周りの括弧は省略可能です。
いくつかのキーワードは、引数として等号(=)で区切られた数値または文字列リテラルを取ります。値は定数なので、文字列は引用符("")で囲まれる必要があり、可変引数は、引数全体が間接指定を使用して構築し参照される必要があります。
オプションの数値式は、失敗した場合にコマンドがタイムアウトすべきその後の時間を秒単位で指定します; 0秒 は単独で試みる結果です。
JOBコマンドがプロセスパラメータ(processparameter) を含まない時、二重コロン( :: )で、入口参照(entryref)とタイムアウトの数値表現とを区別します。
間接指定演算子と1つ以上のJOBコマンドの引数リストに評価される原子式(expression atom)は、JOBコマンドのための正当な引数を構成します。
JOBコマンドの最大コマンドラインの長さは8192バイトです。
もし親プロセスがUTF-8モードで動作している場合、JOBプロセスもUTF-8モードで動作します。
もしバックグラウンドプロセスが親から異なったモードを持たなければならない場合には、必要に応じて環境を変更するシェルスクリプトを作成してください、そして、ZSYstem "/path/to/shell/script &" を使用してZSYstemコマンドでそれを生成してください。
そのGT.Mプロセスの実行が完了する時には、オペレーティングシステムは結果として生じるプロセスを削除します。結果として生じるプロセスは、現在のプロセスで非同期で実行します。いったんGT.Mが結果として生じるプロセスを開始すると、現在のプロセスは続行されます。
もしJOBコマンドがタイムアウトを指定し、GT.Mは、タイムアウト時間が経過する前に、結果として生じるプロセスを作成する場合、JOBは$TESTに true (1)をセットします。 もしGT.Mが、指定されたタイムアウト時間内にプロセスを作成できない場合は、JOBは$TESTを false(0)にセットします。もしJOBコマンドがタイムアウトを指定しない場合、コマンドの実行は $TEST には影響しません。
もしGT.Mが、無効なデフォルトのディレクトリの指定、または、パラメータリストが長すぎるような、タイムアウトインターバルの間にほとんど変化のない何かの理由でプロセスを作成できない場合は、JOBコマンドは実行時エラーを生成します。もしコマンドがタイムアウトを指定しない場合と、環境が十分なリソースを提供しない場合は、結果を生じさせるプロセスを作成するためにリソースを使用できるようになるまで、プロセスは待機します。
JOBがフォークされる時、UNIX は、JOBコマンドが発行するプロセスの環境をコピーすることといくつかのマイナーな変更を加えることによって、新しいプロセスの環境を作成します。デフォルトでは、標準入力は nullデバイスに割り当てられていて、標準出力は routinename.mjo に割り当てられ、標準エラーは routinename.mje に割り当てられます。
以下のセクションでは、GT.Mの中でJOBコマンドのプロセスパラメータ(processparameter)が利用可能な説明をします。
文字列リテラルは、デフォルトのディレクトリを指定します。
ディレクトリの最大長は255文字です。
もしJOBコマンドがデフォルトのディレクトリを指定しない場合、GT.Mは、親プロセスの現在のデフォルトディレクトリを使用します。
strlitは、 JOBプロセスの標準エラーを指定します。strlitは、ファイルまたはDETACHされたソケット(つまり、ソケットプールからのソケット)のいずれかです。DETACHされたソケットをJOBプロセスの標準エラーとして渡すには、 "SOCKET:<handle>" の形式で strlit を指定します。ここで<handle>はソケットハンドルです。JOBプロセスが正常に完了すると、渡されたソケットは閉じられ、親プロセスは使用できなくなります。
文字列の最大長は255文字です。
デフォルトでは、JOBは .mje のファイル拡張子を使用してルーチンネーム(routinename) からエラーファイルを作成します。 .mje:JOBコマンドで作成されたプロセスのデフォルトディレクトリ
リテラル文字列は環境変数 gtmgbldir の値を指定します。
文字列の最大長は255文字です。
デフォルトでは、ジョブは、JOBコマンドを使用しているプロセスのために$ZGBLDIRで定義されているgtmgbldir と同じ仕様を使用しています。
strlitは、 JOBプロセスの標準入力を指定します。strlitは、ファイルまたはDETACHされたソケット(つまり、ソケットプールからのソケット)のいずれかです。DETACHされたソケットをJOBプロセスの標準入力として渡すには、 "SOCKET:<handle>" の形式で strlit を指定します。ここで<handle>はソケットハンドルです。JOBプロセスが正常に完了すると、渡されたソケットは閉じられ、親プロセスは使用できなくなります。
注意 | |
---|---|
INPUTとOUTPUTパラメータの両方にDETACHされたソケットを指定して、JOBプロセスの$PRINCIPALとして渡します。 |
文字列の最大長は255文字です。
GT.Mは、デフォルトのファイル拡張子を提供しません。
デフォルトでは、ジョブは nullデバイスからの入力を取り込みます。
strlitは、 JOBプロセスの標準出力を指定します。strlitは、ファイルまたはDETACHされたソケット(つまり、ソケットプールからのソケット)のいずれかです。DETACHされたソケットをJOBプロセスの標準出力として渡すには、 "SOCKET:<handle>" の形式で strlit を指定します。ここで<handle>はソケットハンドルです。JOBプロセスが正常に完了すると、渡されたソケットは閉じられ、親プロセスは使用できなくなります。
注意 | |
---|---|
INPUTとOUTPUTパラメータの両方にDETACHされたソケットを指定して、JOBプロセスの$PRINCIPALとして渡します。 |
文字列の最大長は255文字です。
デフォルトでは、JOBは .mje のファイル拡張子を使用してルーチンネーム(routinename) から出力ファイルのパス名とJOBコマンドで作成されたプロセスのデフォルトディレクトリを作成します。
JOBコマンドがPASSCURLVNジョブパラメータを指定すると、新しいプロセスは現在の照合、すべてのローカル、エイリアス、およびエイリアスコンテナをJOBしているプロセスの現在のスタックレベルから継承します。この結果、JOBのプロセスで発行されたZWRITEは、範囲外のエイリアスを除いて、JOBコマンドのコンテキスト内のZWRITEとして同じ出力を持ちます。JOBコマンドが完全名、その添字、対応する値、引用符、等号(=)が1MiBを超えるlvnのZWRITE表現を検出すると、JOBしているプロセスでJOBLVN2LONGエラーが生成され、 JOBのプロセスのエラー出力ストリームにJOBLVNDETAILエラーがあります。JOBコマンドでPASSCURLVNが指定されていない場合、JOBのプロセスは親からローカル変数を継承しませんが、アクチュアリストのentryrefにパラメータとして渡された値を受け取ることができます。安価なコマンドではありませんが、 "exclusive" NEWコマンドを使用してJOBのプロセスに渡されるコンテキストを制御できます; 例えば、JOBコマンドがLOCALAとLOCALBだけを渡す前に "NEW (LOCALA, LOCALB)" を追加します。
指定したルーチンを実行する前に、実行するシェルスクリプトの場所を指定します。
JOBプロセスは、シェル・スクリプトを実行するシェル・セッションを生成します。シェル・スクリプトが失敗すると、指定されたルーチンを実行せずにJOBのプロセスが終了します。STARTUPは別のシェルで実行されるため、親から継承されたJOBのプロセスの環境には影響しません。STARTUPは、ディレクトリの作成などの操作に便利です。JOBコマンドの代わりにPIPEデバイスを使用して、生成されたプロセスの環境を制御します。
プロセスパラメータを次の表にまとめます。
JOBのプロセス パラメータ | |||
---|---|---|---|
パラメータ |
デフォルト |
最小値 |
最大値 |
DEF[AULT]=strlit |
JOBコマンドを発行したプロセスと同じディレクトリ |
none |
255文字 |
ERR[OR]=strlit |
./routinename.mje |
none |
255文字 |
GBL[DIR] |
JOBコマンドを発行するプロセスの gtmgbldir と同じ |
none |
255文字 |
IN[PUT]=strlit |
Nullデバイス |
none |
255文字 |
OUT[PUT]=strlit |
./routinename.mjo |
none |
255文字 |
PASS[CURLVN] |
formallist の値だけを渡す |
N/A |
任意の lvn のZWRITE key/value 表現は1MiBを超えてはいけません |
STA[RTUP]=strlit |
none |
none |
ファイルパス名がオペレーティングシステム上に持つことができる最大長で決定されます。GT.Mが現在サポートしているすべてのシステムで少なくとも255バイトです。 |
例:
GTM>JOB ^TEST("V54001","")
これは、現在の作業ディレクトリで ルーチン ^TEST(2つのパラメータ付き)の実行することを開始するジョブを作成します。
例:
JOB PRINTLABELS(TYPE,PRNTR,WAITIM)
これは、現在のルーチンのラベル PRINTLABELS から始まる新しいジョブとして3つの値(TYPE、PRNTR、WAITIM)を渡します。
例:
JOBコマンドの参考例については、「ソケットデバイスの使用」の sockexamplemulti31.m プログラムを参照してください。