日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS
ドキュメント・ライブラリ

タイトルページ
目次
まえがき
リファレンス・セクション
    ≫ コマンド一覧
    ≫ レキシカル関数
付録 A:廃止されたコマンド
付録 B:DCL整数表現の範囲を超える数値の処理
索引
PDF    Vol.1   Vol.2
OpenVMS ホーム

HP OpenVMS
DCL ディクショナリ


目次 索引

F$CONTEXT

F$PID 関数とともに使用し,その選択基準を指定します。 F$CONTEXT 関数を使用すると,F$PID 関数は OpenVMS Cluster 内の任意のノードからプロセス情報を取得できるようになります。

形式

F$CONTEXT (コンテキスト・タイプ,コンテキスト・シンボル,選択項目,選択値,値修飾子)

戻り値


空文字列 ("")。

引数



コンテキスト・タイプ

コンテキスト・タイプを指定します。

現在使用できるコンテキスト・タイプは PROCESS だけです。これは,F$PID に対する選択基準を決めるために使用します。同一 UIC のプロセスを見る場合は,特権は必要ありません。同一 UIC グループ内の別の UIC のプロセスを見る場合は, GROUP 特権が必要です。システム全体の UIC のプロセスを見る場合は, WORLD 特権が必要です。

コンテキスト・シンボル

F$CONTEXT で作成されたコンテキスト・メモリを参照するために, DCL が使用するシンボル名を指定します。 F$PID は,このコンテキスト・シンボルを使用して PID リストを処理します。

シンボルを使用してコンテキスト・シンボルを指定してください。コマンド・プロシージャ内で最初に F$CONTEXT を使用するときには,未定義または空文字列が割り当てられたシンボルを指定してください。シンボルは "PROCESS_CONTEXT" タイプでローカル・シンボルをして作成されます。コンテキストが無効になった場合 (つまり F$PID ですべての PID を検索したか,または,その実行時にエラーが発生した場合) は,シンボルのタイプは "PROCESS_CONTEXT" ではなくなっています。コンテキストをキャンセルする場合は,コマンド・プロシージャ内で F$TYPE 関数を使用して検索できます。

選択基準を設定した後で F$PID を呼び出す場合は,このコンテキスト・シンボルを使用します。

選択項目

選択項目は,F$CONTEXT が使用する選択基準を指定するキーワードです。一度の呼出しに対して 1 つのキーワードしか指定できません。

  注意
項目のリストを使用する場合は, NEQ 選択値を使用しないでください。これは,結果として得られる状態値は,つねに "真" だからです。

次に例を示します。

$ EXAMPLE=f$context("PROCESS",CTX,"USERNAME","A*,B*","NEQ") 

この式は,"ユーザ名が A* に等しくない または ユーザ名が B* に等しくない場合は,その規則に合致するユーザのプロセスを返します" と解釈されます。このオペランドは論理和であるので,状態値は常に "真" になります (たとえば ALFRED は B* に等しくないとか, BOB は A* に等しくないというように,どんなユーザ名でも A* あるいは B* に等しくない値となります)。

コンテキスト・タイプ PROCESS に対して使用できる選択項目キーワードを次の表に示します。

選択項目 選択値 値修飾子 説明
ACCOUNT 文字列 EQL,NEQ 有効なアカウント名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
AUTHPRI 整数値 GEQ,GTR,LEQ,LSS,EQL,NEQ 許可されたベース優先度。Alpha では (0-63)。
CANCEL     該当コンテキストに対する選択基準を取り消す。
CURPRIV キーワード ALL,ANY,EQL,NEQ 有効な特権名キーワード ( またはそのリスト )。詳細は『OpenVMS システム・セキュリティ・ガイド』参照。
GRP 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ UIC グループ番号。
HW_MODEL 整数 EQL,NEQ 有効なハードウェア型番号
HW_NAME 文字列 EQL,NEQ 有効なハードウェア名またはキーワードのリスト。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
JOBPRCCNT 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ ジョブのサブプロセス数
JOBTYPE キーワード EQL,NEQ 有効なジョブ・タイプ・キーワード
(DETACHED, NETWORK, BATCH, LOCAL, DIALUP, REMOTE)。詳細は『OpenVMS ユーザーズ・マニュアル』参照。
MASTER_PID 文字列 EQL,NEQ 主プロセス ID
MEM 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ UIC メンバ番号
MODE キーワード EQL,NEQ プロセス・モード・キーワード
(OTHER,NETWORK,BATCH,および INTERACTIVE)。詳細は『OpenVMS ユーザーズ・マニュアル』参照
NODE_CSID 整数 EQL,NEQ ノードのクラスタ ID 番号
NODENAME 文字列 EQL,NEQ ノード名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカードを使用できる。省略時の設定はユーザのローカル・ノード。すべてのノードを指定する場合は,値 "*" を使用する。
OWNER 文字列 EQL,NEQ 直親 PID
PRCCNT 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ プロセスのサブプロセス数
PRCNAM 文字列 EQL,NEQ プロセス名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
PRI 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ プロセス優先度。 Alpha では (0--63)。
PRIB 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ ベース・プロセス優先度。 Alpha では (0--63)。
STATE キーワード EQL,NEQ 有効なプロセス状態キーワード。詳細は,『OpenVMS System Services Reference Manual』の $GETJPI サービスに関する説明を参照。
STS キーワード EQL,NEQ 有効なプロセス状態キーワード。詳細は,『OpenVMS System Services Reference Manual』の $GETJPI サービスに関する説明を参照。
TERMINAL 文字列 EQL,NEQ 端末名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
UIC 文字列 EQL,NEQ ユーザ識別子(UIC)。 "[group,member]"の形式。
USERNAME 文字列 EQL, NEQ ユーザ名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。



選択値

選択基準の値を指定します。たとえば次の例に示すように,ノード MYVAX 上の全プロセスを処理するには, "NODENAME" キーワードに対して "MYVAX" を指定します。

$ X = F$CONTEXT("PROCESS", ctx, "NODENAME", "MYVAX", "EQL")

いくつかの選択項目では,値をリストにすることもできます。この場合,各値はコンマ (.) で区切らなければなりません。たとえば,ノード名に MYVAX, HERVAX,および HISVAX を指定するには,次のように入力します。

$ X=F$CONTEXT("PROCESS",ctx,"NODENAME","MYVAX,HERVAX,HISVAX","EQL")

ファイルを指定する場合と同様に,いくつかの値に対して,ワイルドカード文字(* や %)を使用できます。

値修飾子

選択値に対する修飾子を指定します。選択値は修飾しなければなりません。

たとえば,次に示すプロセス値のいずれか 1 つに基づいて選択するよう要求することにより,値を修飾できます。

  • LSS --- F$PID への呼び出しで指定した値より小さい

  • LEQ --- F$PID への呼び出しで指定した値より小さいかまたは等しい

  • GTR --- F$PID への呼び出しで指定した値より大きい

  • GEQ --- F$PID への呼び出しで指定した値より大きいかまたは等しい

  • EQL --- F$PID への呼び出しで指定した値と等しい

  • NEQ --- F$PID への呼び出しで指定した値と等しくない

リストの中には,キーワード ALL, ANY, EQL および NEQ で修飾されるものもあります。このようなリストは通常,複数の有効な特権から構成される,プロセス特権マスクのようなマスクです。各キーワードとその意味を次に示します。

  • ALL --- リストのすべての項目がプロセスで真である。

  • ANY --- リストの任意の項目がプロセスの属性の一部である。

  • EQL --- 値が正確に一致する (つまり,指定されていない値は,プロセスで真であってはならない)。

  • NEQ --- 値が一致しない。

複数の選択値を特定の選択修飾子と使用すると, (OR オペランドが指定されているかのように) 選択基準と一致するものを値とみなします。 (AND オペランドが指定されているかのように) 選択値は累積基準ではありません。

ALL は指定した値は存在しなければなりませんが,指定しない他の値も存在しても構いません。 EQL は指定した値は存在しなければなりませんが,指定しない他の値は存在してはなりません。これが,ALL と EQL の相違点です。たとえば,現在のプロセスが TMPMBX と OPER 特権を持っていて,他の特権を持っていても構わない場合は ALL を,他の特権を持っていてはならない場合は EQL をそれぞれ指定します。


説明

F$CONTEXT 関数を使用して F$PID 関数の選択基準を設定します。

F$CONTEXT 関数は,基準を作るときは何度でも呼び出せます。ただし,1 回の呼び出しにつき 1 つの項目しか指定できません。項目値リストが適切な位置に与えられれば,複数のコンテキストを同時に操作することができます。

適切な呼出しで選択基準を設定したら,F$PID を繰り返し呼出して, F$CONTEXT 関数で指定した基準と合う全てのプロセス識別番号 (PID) を戻します。基準と合うプロセスが無くなると,空文字列が戻されます。

F$PID 関数が呼び出されると,コンテキスト・シンボルは "frozen" とみなされます。つまり,対応する選択基準が削除されるまで,同じコンテキスト・シンボルでは F$CONTEXT を再び呼び出すことができません。同じコンテキスト・シンボルに追加の選択基準を設定しようとすると,エラー・メッセージが表示されますが,コンテキストと選択基準には影響しないため F$PID 関数の呼出しは続けることができます。

F$CONTEXT は,プロセス・メモリを使用して選択基準を格納します。ある 2 つの状況では,このメモリが削除されます。 F$PID 関数を呼出して空文字 ("") が戻されたとき,つまり選択基準に合う全てのプロセスが戻された場合と,呼出しの際に CANCEL というキーワードをコンテキストとともに使用した場合です。このタイプの呼出しは Ctrl/Y 操作や他の条件処理ルーチンに適しています。


#1
$!Establish an error and CTRL/Y handler 
 
     $ ON ERROR THEN GOTO error 
     $ ON CONTROL_Y THEN GOTO error 
     $! 
     $ ctx = "" 
     $ temp = F$CONTEXT ("PROCESS", ctx, "NODENAME", "*","EQL") 
     $ temp = F$CONTEXT ("PROCESS", ctx, "USERNAME", "M*,SYSTEM","EQL") 
     $ temp = F$CONTEXT ("PROCESS", ctx, "CURPRIV", "SYSPRV,OPER", "ALL") 
     $!Loop over all processes that meet the selection criteria. 
     $!Print the PID and name of the image for each such process. 
 
     $loop: 
     $ pid = F$PID(ctx) 
     $ IF pid .EQS. "" 
     $ THEN 
     $     GOTO endloop 
     $ ELSE 
     $     image = F$GETJPI(pid,"IMAGNAME") 
     $     SHOW SYMBOL pid 
     $     WRITE SYS$OUTPUT image 
     $     GOTO loop 
     $ ENDIF 
     $!The loop over the processes has ended. 
 
     $endloop: 
     $ EXIT 
     $! 
     $!Error handler. Clean up the context's memory with the CANCEL 
     $!selection item keyword. 
     $! 
     $error: 
     $ IF F$TYPE(ctx) .eqs. "PROCESS_CONTEXT" THEN - 
      temp = F$CONTEXT ("PROCESS", ctx, "CANCEL") 
 
     $ EXIT 
 

この例では,選択基準を設置するために F$CONTEXT が 3 回呼び出されています。最初の呼び出しは,クラスタ内の全ノードを探索するよう指定しています。次の呼出しでは,ユーザ名が "M" で始まるか "SYSTEM" であるプロセスのみを対象とすることを指定しています。最後の呼出しでは, SYSPRV と OPER 特権の両方を持っているプロセスを選択することを指定しています。

ラベル "loop" と "endloop" で囲まれたコマンド行は, F$CONTEXT で設定した選択基準に合うプロセスを処理するため連続して F$PID を呼んでいます。各 PID を検索した後,そのプロセスが実行しているイメージ名を得るため F$GETJPI を呼び出しています。最後に,このプロシージャはイメージの名前を表示します。

エラーの場合,または CTRL/Y が押された場合は,制御は error に移され,( 必要であれば ) コンテキストがクローズされます。ここで,シンボル・タイプが PROCESS_CONTEXT であるか検査している点に注意してください。シンボル・タイプが PROCESS_CONTEXT であれば,選択基準は F$CONTEXT を使用して取り消さなければなりません。シンボル・タイプが PROCESS_CINTEXT ではない場合は,選択基準が設定されなかったか,または,F$PID 実行中にエラーが起きたかプロセス・リストが全て使用されたか,のいずれかです。

#2
f$context("process",ctx,"prcnam  ","symbiont*,mcote*","eql")
f$context("process",ctx,"prcnam  ","symbiont*,mcote* ","neq")
f$context("process",ctx,"prcnam  ","mcote* ","neq")
f$context("process",ctx,"prcnam  ","symbiont*","neq")
 

この例では EQL と NEQ 選択値の違いを表す構文が 3 つ示してあります。最初の関数 ( EQL を指定 ) はプロセス名に symbiont と mcote を含むすべてのプロセスを戻します。2 番目と 3 番目の関数 ( NEQ を指定 ) は全てのプロセス ( プロセス名に symbiont がない,または mcote がないプロセス ) を戻すことに相当します。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.