# OpenVMS
ユーザーズ・マニュアル

前へ | 次へ | 目次 | 索引

## 17.7.1 データ・タイプの変換

整数と文字列の間で変換を行うには，F$INTEGER 関数と F$STRING 関数を使用します。たとえば，次のコマンド・プロシージャはデータ・タイプを変換します。ユーザが文字列を入力すると整数の同値が表示され，整数を入力すると文字列の同値が表示されます。 GOTO 文の中でラベル名を使用するときには， F$TYPE 関数をどのように使用したらよいかに注意してください。 F$TYPE は，シンボルのデータ・タイプに応じて， "STRING" または "INTEGER" を戻します。

    $ IF P1 .EQS. "" THEN INQUIRE P1 "Value to be converted"
    $ GOTO CONVERT_'F$TYPE(P1)'
    $
    $ CONVERT_STRING:
    $ WRITE SYS$OUTPUT "The string ''P1' is converted to ''F$INTEGER(P1)'"
    $ EXIT
    $
    $ CONVERT_INTEGER:
    $ WRITE SYS$OUTPUT "The integer ''P1' is converted to ''F$STRING(P1)'"
    $ EXIT

## 17.7.2 式の評価

INQUIRE や READ などのコマンドは，文字列データしか受け付けません。これらのコマンドを使用して，整数式として評価したいデータを得るには， F$INTEGER 関数を使用してこのデータを変換してから評価します。

EXP シンボルを F$INTEGER 関数の引数として使用する場合には， EXP シンボルの前後に一重引用符 (') を置かなければなりません。こうすると，シンボル置換の最初のフェーズで EXP の値が置換されます。

次の例では，F$INTEGER 関数を使用して，整数式を評価します。

    $ INQUIRE EXP "Enter integer expression"
    $ RES = F$INTEGER('EXP')
    $ WRITE SYS$OUTPUT "Result is",RES

このコマンド・プロシージャからの出力は次のようになります。

    Enter integer expression: 9 + 7
    Result is 16

"9 + 7" の値が置換されます。F$INTEGER 関数が引数の "9 + 7" を処理する場合，式を評価して正しい結果を戻します。

## 17.7.3 シンボルの有無の判別

シンボルが存在するかどうかを判別するには，F$TYPE 関数を使用します。 F$TYPE 関数は，シンボルが未定義であると，空の文字列を戻します。

       .
       .
       .
    $ IF F$TYPE(TEMP) .EQS. "" THEN TEMP = "YES"
    $ IF TEMP .EQS. "YES" THEN GOTO TEMP_SEC
       .
       .
       .

このプロシージャは，TEMP シンボルが前に定義されているかどうかをテストします。定義済みの場合には，TEMP の正しい値が保持され， TEMP が定義されていない場合には， IF 文により "YES" の値が TEMP に割り当てられます。

# 第 18 章
プロセスとバッチ・ジョブ： OpenVMS オペレーティング・システム環境の使用方法

プロセスとは，システムとの会話を可能にするために， OpenVMS オペレーティング・システムで作成される環境です。本章では，次のことについて説明します。

- プロセス・コンテキストの解釈

- サブプロセスの使用

- 仮想ターミナルで切断されたプロセスへの接続

- バッチ・ジョブの操作

本章で説明するコマンドについての詳しい説明は，オンライン・ヘルプまたは『Compaq OpenVMS DCL ディクショナリ』を参照してください。

プロセスの作成方法

ユーザが次のいずれかのタスクを実行すると，システムはプロセスを作成します。

- ログイン
  システムはユーザがログインするごとにそのユーザ用にプロセスを作成する。

- バッチ・ジョブの登録
  システムはバッチ・ジョブを受け取るとそのジョブ用にプロセスを作成する。バッチ・ジョブが完了すると，システムはプロセスを削除する。

- サブプロセスの生成
  ユーザが SPAWN コマンドを使用すると，システムはプロセスを作成する。

- プログラムの実行
  /DETACHED 修飾子または /UIC=uic 修飾子を使用してプログラムを実行すると，システムはプロセスを作成する。

# 18.1 プロセス・コンテキストへの割り込み

特権，シンボル，論理名などプロセスが使用する属性を，プロセス・コンテキストといいます。現在のプロセスのプロセス・コンテキストを表示するには， SHOW PROCESS/ALL コマンドを使用します。

次の例は，プロセス・コンテキストのサンプルです。

    11-DEC-1998 13:30:37.12 (1)  User: CLEAVER (2)  Process ID: 24E003DC    (3)
                                Node: ZEUS        Process name: CLEAVER_1
    Terminal:                                                      (4)
    User Identifier:    [DOC,CLEAVER]   (5)
    Base priority:      4               (6)
    Default file spec:  DISK1:[CLEAVER] (7)

    Process Quotas:                     (8)
     Account name: DOC
     CPU limit:                      Infinite  Direct I/O limit:        18
     Buffered I/O byte count quota:     31808  Buffered I/O limit:      25
     Timer queue entry quota:              10  Open file quota:         57
     Paging file quota:                 22276  Subprocess quota:         4
     Default page fault cluster:           64  AST quota:               38
     Enqueue quota:                       600  Shared file limit:        0
     Max detached processes:                0  Max active jobs:          0

    Accounting information:             (9)
     Buffered I/O count:       140  Peak working set size:        383
     Direct I/O count:           7  Peak virtual size:           2336
     Page faults:              304  Mounted volumes:                0
     Images activated:           1
     Elapsed CPU time:      0 00:00:00.55
     Connect time:          0 00:00:22.76

    Process privileges:                 (10)
     GROUP                may affect other processes in same group
     TMPMBX               may create temporary mailbox
     OPER                 operator privilege
     NETMBX               may create network device

    Process rights identifiers:         (11)
     INTERACTIVE
     LOCAL
     SYS$NODE_ZEUS

    Process Dynamic Memory Area         (12)
      Current Size (bytes)       25600    Current Total Size (pages)    50
      Free Space (bytes)         19592    Space in Use (bytes)        6008
      Size of Largest Block      19520    Size of Smallest Block        24
      Number of Free Blocks          3    Free Blocks LEQU 32 Bytes      1

    Processes in this tree:             (13)
    CLEAVER
      CLEAVER_1 (*)

例を確認するときは，次のことに注意してください。

1. 現在の日時
   SHOW PROCESS/ALL コマンドを実行した日時。

2. ユーザ名
   プロセスに関連するアカウントに割り当てられたユーザ名。

3. プロセス識別番号 (PID)
   システムによってプロセスに割り当てられた固有の番号。 SHOW PROCESS コマンドは，PID を 16 進数で表示する。

4. プロセス名
   プロセスに割り当てられた名前。プロセス名は一意であるため，あるアカウントでログインした最初のプロセスにはユーザ名が割り当てられ，同じアカウントでログインしたそれ以降のプロセスにはターミナル名が割り当てられる。プロセス名は，DCL の SET PROCESS/NAME コマンドで変更できる。

5. ユーザ識別コード (UIC)
   プロセスに関連するアカウントに割り当てられたグループとメンバの番号または文字 (たとえば，[PERSONNEL,RODGERS])。UIC により，ユーザが属するグループが分かる。同じグループに属するユーザ同士は，他のグループのユーザとの間より自由にファイルやシステム資源を共用できる。

6. 優先順位
   プロセスの現在の優先順位。

7. 省略時のファイル指定
   現在のデバイスとディレクトリ。現在の省略時の値は，DCL の SET DEFAULT コマンドによって変更することができる。

8. プロセス・クォータ
   プロセスに関連するクォータ (上限)。クォータは，SHOW PROCESS コマンドに /QUOTAS または /ALL 修飾子を付けて実行することにより確認することができる。

9. 会計情報
   プロセスのメモリの使用状況と CPU 時間に関する情報。この情報は，時々刻々と更新されており， SHOW PROCESS コマンドに /ACCOUNTING または /ALL 修飾子を付けて実行することにより，最新の情報を得ることができる。

10. プロセス特権
    プロセスに付与された特権。特権は，特定のシステム・アクティビティを特定のユーザしか実行できないように制限する。特権は，SHOW PROCESS コマンドに /PRIVILEGES または /ALL 修飾子を付けて実行することにより確認することができる。

11. プロセス・ライト識別子
    アクセス制御リスト (ACL) 保護と一緒に使用されるシステムが定義する識別子。識別子は，ACL の中でユーザを指定する手段である。ACL は， ファイル，デバイス，メールボックスなどのオブジェクトのユーザに許容または拒否されるアクセスの種類を定義するセキュリティ・ツール。

12. プロセスの動的メモリ空間
    プロセスの現在の動的メモリの使用状況。動的メモリは，イメージが実行されるときにシステムによってそのイメージに割り当てられる。プロセスがそのメモリを必要としなくなった場合には，システムはそれを別のプロセスに割り当てる。この情報は，SHOW PROCESS コマンドに /MEMORY または /ALL 修飾子を付けて実行することにより得られる。

13. 階層構造の中のプロセス
    親プロセスに属するサブプロセスのリスト。現在のプロセスはその末尾にアスタリスク (*) が付けられる。このリストは，SHOW PROCESS コマンドに /SUBPROCESSES または /ALL 修飾子を付けて実行することにより得られる。

# 18.2 独立プロセスの使用

独立プロセスは，親プロセスの種類にしたがって，会話型または非会話型のいずれかになります。 DCL の RUN コマンドまたは Create Process システム・サービス ($CREPRC)にユーザが指定する引数に応じて，ユーザまたは OpenVMS オペレーティング・システムがログインを行います。 RUN も $CREPRC も SYS$SYSTEM で LOGINOUT.EXE イメージを実行します。

# 18.3 サブプロセスの使用

SPAWN コマンドを使用すると，現在のプロセスのサブプロセスを作成できます。このサブプロセスの中で，ユーザはシステムと会話して，サブプロセスからログアウトして親プロセスに戻ったり，親プロセスとサブプロセスを切り替えたりできます。一度に 1 つのプロセスしか実行できません。

システム上のそれぞれのユーザは， ジョブ階層構造 によって表現されます。ジョブ階層構造とは，メイン・プロセスを頂点とし，それに属するすべてのプロセスとサブプロセスからなる階層をいいます。サブプロセスは親プロセスに従属し，親プロセスが終了すると削除されます。省略時の設定では，サブプロセスは，親プロセスの名前の後にアンダスコアと固有の番号を付けた名前を持ちます。たとえば，親プロセス名が DOUGLASS の場合，サブプロセスには DOUGLASS_1，DOUGLASS_2 というような名前が付けられます。

## 18.3.1 Spawn タスクによるサブプロセスの使用

タスクに割り込み，2 番目のタスクを実行してから，元のタスクに戻るには， Ctrl/Y を使用してタスクに割り込んだ後， 2 番目のタスクを実行するサブプロセスを生成し，そのサブプロセスを終了してから， CONTINUE コマンドを入力して元のタスクに戻ります。省略時の設定では，ユーザがサブプロセスを作成すると，親プロセスはハイバネート状態になり，サブプロセスの中で DCL レベルでユーザに制御が渡されます。省略時のディレクトリは親プロセスの現在のディレクトリである。たとえば，Ctrl/Y を押して EVE 編集セッションに割り込んだ場合には， CONTINUE コマンドを入力してから Ctrl/W を押して画面を再表示します。

## 18.3.2 サブプロセスの使用による複数のタスクの実行

最初のタスクの実行を続けながら，2 番目のタスクを実行するには， SPAWN/NOWAIT コマンドでサブプロセスを作成します。 SPAWN/NOWAITは，非会話型のバッチに似たサブプロセスを生成し，入力を必要としないコマンドを実行するときにだけ使用します。

親プロセスとサブプロセスの両方が同時に実行されるため，双方がターミナルを制御しようとします。混乱が生じるのを避けるため，次の修飾子やパラメータも指定してください。

- /OUTPUT 修飾子
  サブプロセスが，ターミナルではなく，指定されたファイルに出力を書き込むように指定する。

- SPAWN コマンド・パラメータまたは /INPUT 修飾子
  サブプロセスが，ターミナルから入力を読み込むのではなく，指定されたコマンドを実行するように指定する。

SPAWN コマンドの /INPUT 修飾子を指定すると，サブプロセスは非会話型のプロセスとして生成され，重大エラーまたはファイルの終端を検出すると終了します。 DCL レベルでは，Ctrl/Z がファイルの終端標識として扱われます。

## 18.3.3 サブプロセスの作成

ユーザが作成するそれぞれのプロセスは一意であるため，通常は，あるプロセスで実行されたコマンドが他のプロセスに影響することはありません。ただし，ターミナルの制御はプロセス間で受け渡されるため，ターミナル属性に影響するコマンド (たとえば，SET TERMINAL) は，そのターミナルを制御するすべてのプロセスに影響を及ぼします。たとえば，1 つのプロセスがエコー表示を禁止し，それを復元せずに終了した場合には，次にターミナルを制御するプロセスでもエコー表示は禁止されたままになります。変更したターミナル属性は，SET TERMINAL コマンドによって再設定します。

次の例では，ユーザは，Ctrl/Y を押してコマンド・イメージ (TYPE コマンド) に割り込んでサブプロセスを生成し，そのサブプロセスを終了してから元のプロセスに戻ります。

    $ TYPE MICE.TXT
    Once the weather turns cold, mice may find a crack in the
    foundation and enter your house.  They are looking for food and
    shelter from the harsh weather ahead.
       .
       .
       .
    [Ctrl/Y]
    $ SPAWN
    %DCL-S-SPAWNED, process DOUGLASS_1 spawned
    %DCL-S-ATTACHED, terminal now attached to process DOUGLASS_1
    $ MAIL
    MAIL>
       .
       .
       .
    MAIL> EXIT
    $ LOGOUT
      Process DOUGLASS_1 logged out at 31-DEC-1998 12:42:12.46
    %DCL-S-RETURNED, control returned to process DOUGLASS
    $ CONTINUE
    Once inside, they may gnaw through electrical wires and raid
    your food. Because mice reproduce so quickly, what started
    as one or two mice can quickly become an invasion.  If you seal
    the cracks and holes on the exterior of your foundation, you can
    prevent these rodents from ever getting in.

## 18.3.4 サブプロセスの終了

SPAWN コマンドによって作成されたサブプロセスを終了するには，次のいずれかのコマンドを使用します。

- LOGOUT
  LOGOUT コマンドでサブプロセスを終了すると，そのサブプロセスは (それが作成した他のサブプロセスとともに) 削除され，親プロセスに戻る。

- ATTACH
  ATTACH コマンドでサブプロセスを終了すると，そのサブプロセスはハイバネート状態になり，ターミナルの制御は指定されたプロセスに渡される。 ATTACH コマンドのパラメータとしてプロセス名を指定するか， ATTACH コマンドの /IDENTIFIER 修飾子の値としてプロセス識別番号 (PID) を指定しなければならない。

次の例は，DOUGLASS_1 サブプロセスを終了して， DOUGLASS プロセスに接続する方法を示しています。

    $ ATTACH DOUGLASS
    %DCL-S-RETURNED, control returned to process DOUGLASS
    $ SHOW PROCESS
    11-DEC-1998 10:34:58.50   VTA303             User: DOUGLASS
    Pid: 25C002B4   PROG. name: DOUGLASS         UIC: [200,200]
    Priority:   4   Default file spec: SYS$SYSDEVICE:[DOUGLASS]

    Devices allocated: $11$VTA303:

## 18.3.5 サブプロセス・コンテキスト

サブプロセス・コンテキストは，サブプロセスが親プロセスから受け継ぐ環境です。省略時の設定では，サブプロセスは，省略時の値，特権，シンボル，論理名，制御文字，メッセージ形式，チェック状態，キー定義を受け継ぎます。これらの項目が集まってサブプロセスの環境が形成されます。

次の項目は，親プロセスからは受け継がれません。

- プロセス識別番号 (PID)
  システムは，作成したそれぞれのプロセスに固有の PID を割り当てる。

- プロセス名
  省略時の設定では，サブプロセス名は，親プロセスの名前の後にアンダスコアと整数を付けたもの。別のプロセス名を指定するには，SPAWN コマンドに /PROCESS 修飾子を使用する。プロセス名は一意でなければならない。

- 作成したコマンド
  SET COMMAND コマンドを使用して親プロセスで定義したコマンドは，サブプロセスにコピーされない。作成されたコマンドをサブプロセスで使用するには，SET COMMAND を使用してサブプロセスに対してそのコマンドを作成しなければならない。

- 特権を付与する特権
  サブプロセスを生成する場合，プロセス・コンテキストには，親プロセスの特権は含まれるが，特権を付与するための特権は含まれない。たとえば，Mail でサブプロセスを生成して，特権付き操作を実行したい場合には， Mail を起動する前に親プロセスで正しい特権を設定しておかなければならない。

サブプロセスが親プロセスのコンテキスト項目の一部を受け継がないようにするには，次の SPAWN 修飾子を使用します。

SPAWN コマンド修飾子 | 禁止または変更される項目
--- | ---
/CARRIAGE_CONTROL, /PROMPT | DCL プロンプト
/NOCLI | CLI (コマンド言語インタプリタ。省略時の設定では DCL 。)
/NOKEYPAD | キーパッド定義
/NOLOGICAL_NAMES | 論理名
/NOSYMBOL | シンボル

/SYMBOL 修飾子と /LOGICAL_NAMES 修飾子は，システムが定義するシンボル ($SEVERITY や $STATUS など) やシステムが定義する論理名 (SYS$COMMAND や SYS$OUTPUT など) には影響を及ぼしません。

論理名やシンボルをサブプロセスにコピーすると，時間(数秒)がかかるため，サブプロセスの中で論理名やシンボルを使用する予定がなければ， SPAWN コマンドに /NOLOGICAL_NAMES と /NOSYMBOL 修飾子を使用するとよいでしょう。サブプロセスを頻繁に使用する場合には，ATTACH コマンドを使用すると，最も効率良くサブプロセスで作業を開始したり終了したりできます。この方法を使用すると，システムが新しいサブプロセスを作成するのを待つことなく，親プロセスとサブプロセスとの間で制御を迅速に切り換えることができます。

前へ | 次へ | 目次 | 索引