[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

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

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

本章で説明するコマンドについての詳しい説明は,オンライン・ ヘルプまたは『OpenVMS DCL Dictionary』を参照してください。

プロセスの作成方法

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

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は,非会話型のバッチに似たサブプロセスを生成し, 入力を必要としないコマンドを実行するときにだけ使用します。

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

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コマンドによって作成されたサブプロセスを終了するには,次のいずれかのコマンドを使用します。

次の例は,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 サブプロセス・コンテキスト

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

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

サブプロセスが親プロセスのコンテキスト項目の一部を受け継がないようにするには, 次の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コマンドを使用すると, 最も効率良くサブプロセスで作業を開始したり終了したりできます。 この方法を使用すると,システムが新しいサブプロセスを作成するのを待つことなく, 親プロセスとサブプロセスとの間で制御を迅速に切り換えることができます。

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

仮想ターミナルが使用可能な状態にあるときに,モデム回線の接続が断たれた場合, プロセスは切断された仮想ターミナル・プロセスとしてシステム上にアクティブ状態のまま存在し続けます。 ユーザは,システム管理者によって指定された時間( 省略時の値は900秒,すなわち15分)内にプロセスに再接続しなければなりません。 この時間内にプロセスに再接続しないと, プロセスは削除されます。


注意
UIC (利用者識別コード)に対応する仮想ターミナル・ プロセスにしか接続できません。

18.4.1 ターミナルの切断

ターミナルが切断されるのは次のような状況の場合です。

プロセスが切断されている場合,古いプロセスに再接続して,切断される前の状態に戻ることもできます。 ログインすると,次のようなプロンプトが出されます。

         You have the following disconnected process:
     Terminal   Process name    Image name
     VTA52:     RWOODS          (none)
     Connect to above listed process [YES]:

プロンプトに対してReturnキーを押すか,Yesと入力すると,DCLのCONNECT/CONTINUE コマンドが自動実行されたかのように現在のプロセスからログアウトできます。No と入力するか,応答が遅れると(応答時間が時間切れになると) ,新しいプロセスにログインしたままになります。 以後,古いプロセスに接続することはできません。

複数の切断されたセッションがある場合には,再接続したい仮想ターミナルの名前を求めるプロンプトが出されます。 表示されたセッションのどれにも接続したくない場合には,No と入力します。

18.4.2 切断されたプロセスの削除

一定の間隔が経過した後,システムは切断されたプロセスを自動的に削除します。 しかし,次に示すように,切断されたプロセスから直接ログアウトすれば, システム資源を節約できます。

手順 操作
1 他に切断されたジョブがあるかどうかを判断するには,DCL のSHOW USERSコマンドを入力する。
2 DCLのCONNECT/LOGOUTコマンドを入力して, 現在のプロセスからログアウトする。存在する最後のプロセスに到達するまで, 関連する各仮想ターミナル(先頭にVTAがついたターミナル)に接続する。
3 DCLのLOGOUTコマンドを入力する。

18.4.3 切断されたプロセスの管理

仮想ターミナルを使用すると,一度に複数の切断されたプロセスを管理することができます。 ただし,仮想ターミナルにログインしているときは, 物理ターミナルが切断されていることに注意してください。現在の仮想ターミナル・ プロセスに関連する物理ターミナル以外のデバイスに入出力要求を向けると, 待ち状態になります。待ち状態のプロセスは,時間切れになると終了します。 ただし,入出力要求を受けるはずの物理ターミナルに再接続すれば, 待ち状態に入ったポイントからプロセスの実行が継続されます。 それぞれのプロセスにそのコンテキストに関連する名前を付けておくと, プロセスの再接続が簡単になります。

たとえば,SMITHというユーザがファイルを編集するプロセスを実行する場合,SET PROCESS/NAME コマンドを使用して,プロセスをSMITH_EDITと命名できます。 こうすれば,SMITHは,編集を続けるためにどのプロセスに接続すればよいのかが簡単に分かります。

システム管理者は,システム全般でまたはターミナル単位で仮想ターミナルの使用を制限できます。

18.5 バッチ・ジョブ

バッチ・ジョブは,非会話型のプロセスです。バッチ・ジョブは固有のプロセスで実行されるため, 同時に異なる処理を行う2つ以上のプロセスを指定することができます。 たとえば,以下のようなことができます。

18.5.1 バッチ・ジョブの登録

ユーザがバッチ・ジョブをキューに登録すると,使用中のアカウント属性とプロセスの属性を持つ独立プロセスが作成されます。 システムはそのプロセスからジョブを実行して, ジョブが完了するとプロセスを削除します。 また,システム・ログイン・コマンド・プロシージャ(SYLOGIN.COM) とパーソナル・ログイン・コマンド・プロシージャ(LOGIN.COM)を実行してから, バッチ・ジョブの中のコマンド・プロシージャを実行します。これらのプロシージャを実行すると, 出力がログ・ファイルに書き込まれます。 バッチ・ジョブが完了すれば,ログ・ファイルを印刷したり,ディレクトリの1 つにセーブしたりできます。

バッチ・モードでジョブを実行するには,DCLのSUBMITコマンドを入力してジョブをバッチ・ キュー(実行を待っているバッチ・ジョブのリスト)に登録します。 キューに登録されたジョブは,省略時のバッチ・キューであるSYS$BATCH に渡され,実行を待っているジョブのキューの終わりに追加されます。 先に登録されていたジョブが完了してから,新たに登録されたジョブが実行されます。OpenVMS システムでは,同時に実行できるバッチ・ ジョブ数は,システム管理者がバッチ・キューを作成するときに指定します。 省略時の設定では,SUBMITコマンドはファイル・タイプに.COMを使用します。

たとえば,次のコマンドは,JOB1.COMをSYS$BATCHに登録します。

     $ SUBMIT JOB1
     Job JOB1 (queue SYS$BATCH, entry 651, started on SYS$BATCH)

システムは,ジョブの名前,ジョブが登録されているキュー,ジョブに割り当てられたエントリ番号を表示します。 ジョブがバッチ・キューに登録されると,DCL プロンプトが出されます。DCLコマンド(たとえば, DELETE/ENTRY)の中でバッチ・ジョブを参照しなければならない場合には, ジョブ・エントリ番号を使用して参照します(ジョブ・エントリ番号は,SHOW ENTRY コマンドによって得られます)。複数のプロシージャを1つのバッチ・ ジョブに登録した場合,エラーまたは回復不可能な(重大)エラー状態が生じていずれかのプロシージャが終了するとバッチ・ ジョブも終了します。

バッチ・ジョブは,ユーザがバッチ・キューに登録したときにすぐ実行を開始する必要はありません。 バッチ・ジョブの実行を開始する時刻を指定するには,SUBMIT/AFTER コマンドを入力します。次の例では,ジョブは午後11 時30分以降にキューに登録されます。

     $ SUBMIT/AFTER=23:30 JOB1.COM

コマンド・プロシージャをキューに登録してバッチ実行を行う場合には, システムは,バージョン番号を含む,コマンド・プロシージャの完全なファイル指定をセーブします。 コマンド・プロシージャをキューに登録した後でコマンド・ プロシージャを更新すると,バッチ・ジョブは,新しいバージョンではなく, キューに登録したコマンド・プロシージャのバージョンを実行します。

ログイン時の省略時の値は,通常,コマンド・プロシージャに示されたファイルにアクセスするのに必要な省略時の値ではないため, 次のいずれかの方法を使用して, 正しいファイルにアクセスするようにします。

バッチ・ジョブを実行すると,出力をログ・ファイルに書き込みます。省略時の設定では, ログ・ファイルはキューに登録するコマンド・プロシージャと同じ名前を持ち, ファイル・タイプは.LOGになります。ジョブが完了すると, システムはログ・ファイルを印刷し,ディレクトリから削除します。 ログ・ファイルのセーブについては,第18.5.3項を参照してください。

ログイン・コマンド・プロシージャ内部のバッチ・ジョブのチェック

バッチ・ジョブをキューに登録するたびに,システムは,パーソナル・ログイン・ コマンド・プロシージャを実行します。F$MODE()レキシカル関数を使用してバッチ・ ジョブをテストすれば,バッチ・ジョブを実行するときにログイン・ コマンド・プロシージャの一部を指定したり省略したりできます。

たとえば,バッチ・ジョブ専用のコマンド,論理名,シンボルを含むログイン・ コマンド・プロシージャの中のセクションがあるとします。この場合, このセクションにBATCH_COMMANDSのラベルを付けてから,ログイン・ コマンド・プロシージャの始めに次のコマンドを指定します。

     IF F$MODE() .EQS. "BATCH" THEN GOTO BATCH_COMMANDS
        .
        .
        .

ユーザがバッチ・ジョブをキューに登録したときに,システムがログイン・ コマンド・プロシージャの中のコマンドを実行しないようにするには, プロシージャの始めに次のコマンドを指定します。

     IF F$MODE() .NES. "INTERACTIVE" THEN EXIT

このコマンドは,ログイン・コマンド・プロシージャのどこにでも指定できます。 ユーザがバッチ・ジョブをキューに登録すると,システムは,前のコマンドが置かれたポイントまでログイン・ コマンド・プロシージャを実行します。

複数のコマンド・プロシージャの登録

SUBMITコマンドを入力する場合,1つのジョブの中で複数のコマンド・プロシージャを実行するように指定できます。/NAME 修飾子で名前を指定する場合を除いて,SUBMIT コマンドは最初のコマンド・プロシージャの名前をジョブ名として使用します。 エラーによってジョブの中のいずれかのコマンド・ プロシージャが終了すると,ジョブ全体が終了します。

バッチ・ジョブを実行する場合,最初のプロシージャ(UPDATE.COM)の操作コンテキストは2 番目のプロシージャ(SORT.COM)には残されません。すなわち, システムは,UPDATE.COMによって作成されたローカル・シンボルを削除してから,SORT.COM を実行します。ただし,グローバル・シンボルは残されます。

1つのジョブの中では,それぞれのコマンド・プロシージャに別々のパラメータを指定することはできません。

次の例では,SUBMITコマンドはバッチ・ジョブを作成します。このバッチ・ ジョブは,UPDATE.COMを実行した後,SORT.COMを実行します。

     $ SUBMIT UPDATE,SORT
     Job UPDATE (queue SYS$BATCH, entry 207) started on SYS$BATCH

次の例は,同じ2つのパラメータをUPDATE.COMとSORT.COMに渡します。

     $ SUBMIT UPDATE, SORT/PARAMETERS = -
     _$ (DISK1:[ACCOUNT.BILLS]DATA.DAT, DISK2:[ACCOUNT]NAME.DAT)
     $ Job UPDATE (queue SYS$BATCH, ENTRY 208) started on SYS$BATCH

18.5.2 バッチ・ジョブへのデータの受け渡し

バッチ・ジョブの省略時の入力ストリーム(SYS$INPUT)は,実行中のコマンド・ プロシージャです。独立プロセスがバッチ・ジョブを実行しているため,( 会話形式で実行するコマンド・プロシージャの場合のように) SYS$INPUTをターミナルに再定義することはできません。バッチ・ジョブに入力を渡すには, 次のいずれかの方法を使用します。

1つのジョブの中ではそれぞれのコマンド・プロシージャに別々のパラメータは指定できません。 別々のパラメータを渡す必要がある場合には,それぞれのコマンド・ プロシージャに対してSUBMITコマンドを使用します。

次の例では,データ行がイメージAVERAGE.EXEに渡されます。

     $! Execute AVERAGE.EXE
     $ RUN AVERAGE
     647
     899
     532
     401
     $ EXIT

次の例では,SYS$INPUTはファイルとして一時的に定義されます。

     $ DEFINE/USER_MODE SYS$INPUT STATS.DAT
     $ RUN AVERAGE
     $ EXIT

次の例では,ファイルEMPLOYEES.DATのパラメータがコマンド・プロシージャCHECKS.DAT に渡されます。

     $ SUBMIT/PARAMETERS=(DISK1:[PAYROLL]EMPLOYEES.DAT) CHECKS
     Job CHECKS (queue SYS$BATCH, entry 209) started on SYS$BATCH


注意
SHOW QUEUE/FULLコマンドは, バッチ・キューの中のジョブについての完全な情報を表示します。この中には, プロシージャに渡すパラメータも含まれるため,バッチ・ジョブにはパスワードなどの機密情報は渡さないでください。

18.5.3 バッチ・ジョブ出力の制御

省略時の設定では,ログ・ファイルはバッチ・ジョブの中の最初のコマンド・ プロシージャと同じ名前を持ち,ファイル・タイプは.LOGになります。 システムは,バッチ・ジョブからの出力を1分おきにログ・ファイルに書き込みます。 これとは異なる時間間隔を指定するには,コマンド・プロシージャにSET OUTPUT_RATE コマンドを指定します。

システムがログ・ファイルに書き込みを行っているときに,EDTエディタを使用してログ・ ファイルを読み込もうとすると,ファイルが別のユーザによってロックされていることを示すメッセージが出されます。 この場合は, 数秒待ってから,もう一度読み込んでください。ただし,EVEエディタを使用すると, 同じ状況でもバッチ・ジョブのログ・ファイルを読み込めます。EDIT/TPU/READ_ONLY とログ・ファイルの名前を指定すれば,EVE コマンドを使用してログ・ファイルの中を参照でき,ファイルを変更しても, その内容はセーブされません。/READ_ONLY修飾子を指定せずに,何らかの方法でログ・ ファイルを変更すると,バッチ・ジョブは終了します。

バッチ・ジョブはユーザのユーザ名でログインし,そのユーザのパーソナル・ ログイン・コマンド・プロシージャを実行するプロセスなので,バッチ・ ジョブからの出力にはパーソナル・ログイン・コマンド・プロシージャの内容も含まれます。 バッチ・ジョブからの出力には,バッチ・ジョブ・ ログ・ファイルに書き込まれたすべての情報(コマンド・プロシージャ出力, エラー・メッセージなど)と完全なログアウト・メッセージも含まれています。 パーソナル・ログイン・コマンド・プロシージャがバッチ・ ログ・ファイルに書き込まれないようにするには,パーソナル・ログイン・ コマンド・プロシージャの始めに次のコマンドを追加します。

     $ IF F$MODE() .EQS. "BATCH" THEN SET NOVERIFY

省略時の設定では,ログ・ファイル名は,ジョブをキューに登録したときの名前になります。 また,省略時の設定では,ログ・ファイルは,ファイル・ タイプ.LOGを持ち,ログイン時の省略時の値によって指定されたデバイスとディレクトリを想定します。 ジョブをキューに登録するときに別のログ・ ファイル名を指定するには,SUBMITコマンドに/LOG_NAME修飾子を使用します。

バッチ・ジョブ・ログ・ファイルには,SYS$OUTPUTとSYS$ERRORへのすべての出力が収められます。 また,省略時の設定では,コマンド・プロシージャで実行されるすべてのコマンド行も収められます。 コマンド行が印刷されないようにするには, コマンド・プロシージャの中でSET NOVERIFYコマンドまたはF$VERIFY レキシカル関数のいずれかを使用します。ジョブが完了すると, システムは(長いシステム・ログアウト・メッセージ形式を使用して) ジョブ終了情報をログ・ファイルに書き込みます。

SET VERIFYコマンドが有効な場合には,SET PREFIXコマンドを使用してそれぞれのコマンド行を 時刻印字すれば,それぞれのコマンド行が実行される正確な時間を知ることもできます。

バッチ・ジョブを正しく実行できない場合には,ログ・ファイルを調べて, コマンド・プロシージャに障害が生じたポイントと障害を引き起こしたエラー状態を判別します。

ログ・ファイルのセーブ

ログ・ファイルをセーブするには,/KEEPまたは/NOPRINTER修飾子を使用します。/KEEP 修飾子は印刷後にログ・ファイルをセーブし,/NOPRINTER 修飾子はログ・ファイルを印刷せずにセーブします。いずれの修飾子も指定しないと, 省略時のアクションがとられて,ログ・ファイルは省略時の印刷キューであるSYS$PRINT に登録され,印刷後は削除されます。/KEEP修飾子と/NORPINTER 修飾子は,ログ・ファイルを省略時のログイン・ディレクトリにセーブします。 ログ・ファイルはバッチ・ジョブの中の最初のコマンド・ プロシージャと同じ名前を持ち,ファイル・タイプは.LOG です。別のファイル名やディレクトリ名,またはその両方を指定するには,/LOG_FILE 修飾子を使用します。ログ・ファイルのファイル指定を変更してセーブするには,/LOG_FILE に加えて,/KEEPまたは/NOPRINTERのいずれかを指定しなければなりません。

次の例では,ログ・ファイルがDISK2:[JONES.RESULTS]UPDATE.LOGという名前のファイルにセーブされます。

     $ SUBMIT/LOG_FILE=DISK2:[JONES.RESULTS]/NOPRINTER -
     _$ DISK2:[JONES.RESULTS]UPDATE

ログ・ファイルの読み込み

TYPEコマンドを使用すると,ログ・ファイルを読み込んでバッチ・ジョブがどの程度完了したかを判別できます。 ただし,システムがログ・ファイルに書き込みを行っているときにログ・ ファイルを表示しようとすると, ファイルが別のユーザによってロックされていることを示すメッセージが出されます。 この場合には,数秒待ってから,もう一度試してください。

バッチ・ジョブ・ログにすべてのコマンド出力を指定する

通常,プログラムをコンパイルしたりリンクしたり実行したりするバッチ・ ジョブ・コマンド・プロシージャは,コンパイラ・リストやリンカ・ マップなどの印刷済みの出力を生成します。このようなファイルの印刷済みコピーを生成するには, バッチ・ジョブ・コマンド・プロシージャにファイルを印刷するのに必要な PRINT コマンドを指定します。

バッチ・ジョブ・ログに,コンパイラまたはリンカ出力ファイルの印刷済みリストを含む, コマンド・プロシージャからのすべての出力を収めたい場合には, 次のいずれかを実行します。

このコマンド・プロシージャの処理が終了すると,バッチ・ジョブ・ログ, コンパイラ・リスト,リンカ・マップの3つの出力リストが生成されます。

     $ FORTRAN/LIST BIGCOMP
     $ PRINT BIGCOMP.LIS
     $ LINK/MAP/FULL BIGCOMP
     $ PRINT BIGCOMP.MAP

次の例では,修飾子を使用して,出力をSYS$OUTPUTに送信する方法を示しています。

     $ FORTRAN/LIST=SYS$OUTPUT  BIGCOMP
     $ LINK/MAP=SYS$OUTPUT/FULL BIGCOMP

バッチ・ジョブの中でこれらのコマンドが実行されると,コンパイラとリンカからの出力ファイルは直接ログ・ ファイルに書き込まれます。

18.5.4 バッチ・ジョブ属性の変更

ジョブをキューに登録しても,ジョブの実行開始前であれば,SET ENTRY またはSETQUEUE/ENTRYコマンドと一緒に適切な修飾子を使用すれば,ジョブに関連する属性を変更できます。

次の例では,バッチ・ジョブをバッチ・キューに保留した状態で,バッチ・ ジョブの名前を変更するために使用できる2種類の方法を示しています。

     $ SET QUEUE/ENTRY=209/NAME=NEW_NAME SYS$BATCH
     $ SET ENTRY 209 /NAME=NEW_NAME

どちらのコマンドも,ジョブ番号209の名前をNEW_NAMEに変更します。

SET ENTRYまたはSET QUEUE/ENTRYコマンドで変更できる内容の一部を次に示します。 修飾子の完全なリストは,『OpenVMS DCL Dictionary』を参照してください。SUBMIT コマンドで指定できるほとんどの修飾子がSET ENTRY とSET QUEUE/ENTRYコマンドでも使用できます。

次のような変更を加えることができます。

18.5.5 SUBMITコマンド修飾子

バッチ・ジョブの特性を制御するためにSUBMITコマンドに対して指定できる修飾子は次のとおりです。 省略時のワーキング・セット,ワーキング・ セットの超過値,ワーキング・セット・サイズ,ジョブ・スケジューリング優先順位,CPU 時間制限など,実行属性も指定できます。

/AFTER
バッチ・ジョブを実行できるようになる時間を指定する。ジョブは, 指定された時間になるまでバッチ・キューに留まる。ユーザがジョブを明示的に解放するまでキューの中に保留するには,/HOLD 修飾子を使用する。 保留されているジョブを解放するには,SET ENTRY/RELEASEコマンドを使用する。

/NAME
バッチ・ジョブの名前を指定する。これを指定しないと,ジョブ名の省略時の値は, ジョブの中の最初の(または唯一の)コマンド・プロシージャのファイル名になる。

/NOTE
SHOW QUEUE/FULLコマンドを実行した結果に表示されるメッセージ文字列を指定する。 ジョブについての情報をオペレータやシステム管理者に伝達できるようになる。

/NOTIFY
ジョブの完了を通知するように要求する。バッチ・ジョブの実行が終了すると, システムはメッセージをターミナルに送信する。

/PARAMETERS
パラメータをバッチ・ジョブに渡す。

/NOPRINTERまたは/KEEP
バッチ・ジョブ・ログ・ファイルをセーブする。

/QUEUE
バッチ・ジョブをSYS$BATCH以外のキューに送信する。リモート・ノードにあるコマンド・ プロシージャを実行するには,/REMOTE修飾子を使用する。 このとき,ジョブはリモート・ノードのSYS$BATCHに送信される。

/RESTART
ジョブの実行中にシステムに障害が生じた場合に,ユーザがジョブを再開できるようにする。

/RETAIN
バッチ・ジョブが完了してもバッチ・ジョブをキューの中に残す。ジョブの完了状態を調べるには,SHOW QUEUE またはSHOW ENTRYコマンドを使用する。

18.5.6 バッチ・キューの中のジョブの表示

ジョブがバッチ・ジョブ・キューに登録されていれば,SHOW ENTRYコマンドまたはSHOW QUEUE コマンドを使用してジョブの状態を監視できます。キューの中にジョブが存在しない場合には, 次のメッセージが表示されます。

     $  SHOW QUEUE BOSTON_BATCH
     Batch queue BOSTON_BATCH, on BOSTON::

ジョブに関する完全な情報を表示するには,SHOW ENTRYまたはSHOW QUEUE コマンドに/FULL修飾子を指定します。キューの中の他のジョブの状態を表示するには,SHOW QUEUE/ALL コマンドを使用します。

次の例では,エントリ番号999が表示されます。

     $ SUBMIT EXCHAN.DAT
     Job EXCHAN (queue SYS$BATCH entry 999) started on SYS$BATCH
     $ SHOW ENTRY 999

       Entry  Jobname         Username     Blocks  Status
       -----  -------         --------     ------  ------
         999  EXCHAN          BLASS             3  Executing
              On batch queue SYS$BATCH
     $ SUBMIT/NOPRINTER/PARAMETER=STATS.DAT UPDATE
     Job UPDATE (queue SYS$BATCH entry 1080) started on BOSTON_BATCH
     $ SHOW QUEUE BOSTON_BATCH
     Batch queue BOSTON_BATCH on BOSTON::

       Entry  Jobname         Username     Blocks  Status
       -----  -------         --------     ------  ------
        1080  UPDATE          ODONNELL         36  Executing

次の例では,/FULL修飾子が指定されているため,BOSTON_BATCHに関する統計情報と, ジョブ番号999に関連する属性が表示されます。

     $ SHOW ENTRY/FULL 999

       Entry  Jobname         Username     Blocks  Status
       -----  -------         --------     ------  ------
         999  EXCHAN          BLASS             3  Executing
              On batch queue BOSTON_BATCH
              Submitted 11-DEC-1998 13:12 /PRIORITY=100
              WRKD:[BLASS]EXCHAN.DAT;3
     $ SHOW QUEUE/FULL BOSTON_BATCH
     Batch queue BOSTON_BATCH, on BOSTON::
         /BASE_PRIORITY=3 /JOB_LIMIT=5 /OWNER=[EXEC] /PROTECTION=(S:E,O:D,G:R,W:W)

       Entry  Jobname         Username     Blocks  Status
       -----  -------         --------     ------  ------
        1080  UPDATE          ODONNELL         36  Executing
         Submitted 11-DEC-1998 10:46 /KEEP /PARAM=("STATS.DAT") /NOPRINTER /PRIO=4
         _BOSTON$DQA2:[ODONNELL]TEMP.COM;1 (executing)

次の例では,SHOW QUEUE/ALLコマンドを使用して,BOSTON_BATCHキュー内のすべてのジョブを表示します。

     $ SHOW QUEUE/ALL BOSTON_BATCH
     Batch queue BOSTON_BATCH on BOSTON::

       Entry  Jobname         Username             Status
       -----  -------         --------             ------
         923  no privilege                         Executing
         939  no privilege                         Holding until 11-DEC-1998 19:00
        1080  UPDATE          ODONNELL             Executing

特権ユーザの場合を除いて,自分のアカウントでキューに登録されたジョブの情報しか表示されないことに注意してください。

18.5.7 バッチ・ジョブの削除と終了

バッチ・ジョブは,実行前でも実行中でも削除できます。保留中またはすでにバッチ・ キューで実行されている項目を削除するには,DELETE/ENTRY コマンドを使用します。自分がキューに登録しなかったジョブを削除するには, 特別な特権が必要です。DELETE/ENTRYコマンドの結果としてジョブが終了した場合は, ログ・ファイルは印刷されず,ディレクトリからも削除されません。

DELETE/ENTRYコマンドを使用してジョブを終了した場合は,オペレーティング・ システムの通常のジョブ終了アクティビティが先取りされるため, 異常終了として扱われます。この結果,バッチ・ジョブ・ログには,ジョブ時間と会計情報を要約した標準ログアウト・ メッセージは収められません。 ただし,明示的にEXITコマンドまたはSTOPコマンドを出して終了した場合やこのいずれかのコマンドを( 現在のON状態の結果として)暗黙に実行して終了した場合には, 正常終了とみなされます。正常終了後,オペレーティング・ システムは,正しいランダウンおよび会計情報プロシージャを実行します。

次のコマンドはSYS$BATCHのなかでジョブ・エントリ210を削除しています。

     $ DELETE/ENTRY=210 SYS$BATCH

18.5.8 バッチ・ジョブの再開

バッチ・ジョブの実行中にシステムが異常終了した場合には,ジョブは完了しません。 システムが回復してキューが再開されると,実行中のジョブは強制終了され, キューの中の次のジョブが実行されます。ただし,バッチ・ ジョブをキューに登録するときに /RESTART修飾子を指定しておけば, ジョブが終了する前にシステムがクラッシュしても,システムが復旧した後, そのジョブは再実行されます。

省略時の設定では,バッチ・ジョブは最初の行から再実行されます。 コマンド・プロシージャにシンボルを追加すれば,別の場所から実行を再開できますが, これについては第15章第16章を参照してください。

システム・クラッシュ後のジョブの再開に加えて,ジョブを明示的に終了した後でもジョブを再開できます。 ジョブを終了した後,同じキューまたは別のキューでジョブを再開するには,STOP/QUEUE/REQUEUE/ENTRY コマンドを使用します。

この例に示したコマンドは,SYS$BATCHのジョブ212を停止し,SYS$BATCH に再登録します。

     $ STOP/QUEUE/REQUEUE/ENTRY=212 SYS$BATCH

このコマンドを入力するには,ジョブ212がSUBMITコマンドに /RESTART修飾子を指定して登録されていなければなりません。 バッチ・ジョブを2度目に実行する場合, システムは,グローバル・シンボルBATCH$RESTARTを使用してどこからジョブの実行を開始するかを判別します。

18.5.9 バッチ・ジョブ実行の同期化

コマンド・プロシージャの中でSYNCHRONIZEコマンドとWAITコマンドを使用すれば, プロシージャを待ち状態に置くことができます。SYNNCHRONIZE コマンドを指定すると,プロシージャは指定されたジョブが完了するのを待ちますが,WAIT コマンドを指定すると,指定された時間が経過するのを待ちます。

SYNCHRONIZEコマンドでジョブ名を指定する場合は,同期化するジョブがユーザ名と対応している必要があります。 通常ジョブは,そのジョブをキューに登録するプロセスのユーザ名と対応しています。 異なるユーザ用のジョブを同期化するには,SYNCHRONIZE コマンドに/ENTRY修飾子を付けて, ジョブ・エントリ番号を指定しなければなりません。

たとえば,2つのジョブを同時にキューに登録して共同作業を行う場合, 一方のジョブには次のコマンドを指定できます。

     $ SYNCHRONIZE BATCH25

このコマンドを実行すると,ジョブ名BATCH25を持つジョブの実行が完了するまで, コマンド・プロシージャの実行を継続できません。

このSYNCHRONIZEコマンドは,ジョブ454が完了するまで,現在のコマンド・ プロシージャを待ち状態に置きます。

     $ SYNCHRONIZE/ENTRY=454

図 18-1は,並行して実行するためにキューに登録されたが, 正しく実行するためには同期化しなければならないコマンド・ プロシージャの例です。それぞれのプロシージャが大きなソース・ プログラムをコンパイルします。

図 18-1 バッチ・ジョブ実行の同期化

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

【1】
それぞれのSUBMITコマンドで2つのジョブをキューに登録することが要求されている。 最初のプロセスが作成される。
【2】
FORTRANコマンドの実行後,SYNCHRONIZEコマンドが実行される。ジョブ315 が現在のジョブまたは待ち状態のジョブの場合には,ジョブ314は次のコマンドを実行しない。
【3】
ジョブ315の実行が完了すると,ジョブ314 は次のコマンドを実行する。

18.5.10 WAITコマンドの使用方法

WAITコマンドは,コマンド・プロシージャがディスクやテープ・ドライブなどの共用システム資源へアクセスしなければならない場合に便利です。

次の例は,テープ・ドライブの割り当てを要求するプロシージャです

     $ TRY:
     $      ALLOCATE DM: RK:
     $      IF $STATUS THEN GOTO OKAY
     $      WAIT 00:05
     $      GOTO TRY
     $ OKAY:
     $ REQUEST/REPLY/TO=DISKS -
          "Please mount BACK_UP_GMB on ''F$TRNLNM("RK")'"
        .
        .
        .

WAITコマンドが正常に終了しないと,プロシージャは待ち状態になります。5 分後に,要求を再試行します。

ALLOCATE要求の後のIFコマンドは,$STATUSの値をチェックします。$STATUS の値が正常終了を示している場合には,コマンド・プロシージャは継続されますが, そうでない場合には,WAITコマンドが実行されます。WAIT コマンドは,5分の時間間隔を指定しています。5分待機した後, 次のコマンドGOTOが実行され,要求が繰り返されます。このプロシージャは, 正常終了するまで,またはバッチ・ジョブが削除されるか終了されるまで, ループを繰り返し,デバイスを割り当てようとします。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]