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


前へ 次へ 目次 索引


16.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-1999 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.

16.3.4 サブプロセスの終了

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

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


$ ATTACH DOUGLASS
%DCL-S-RETURNED, control returned to process DOUGLASS 
$ SHOW PROCESS
11-DEC-2002 10:34:58.50   User: DOUGLASS         Process ID:   2061C478 
                          Node: ALPHAI           Process name: "DOUGLASS" 
Terminal:           VTA2195:  TNA2170: (Host: 16.32.123.45 Port: 6789)
 
User Identifier:    [DOC,DOUGLASS] 
Base priority:      4 
Default file spec:  DISK1:[DOUGLASS] 
Number of Kthreads: 1 
 
Devices allocated:  ALPHAI$VTA2195: 
 
Soft CPU Affinity: off

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

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

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

注意

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

16.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 と入力します。

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

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

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

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

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

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

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

16.5 バッチ・ジョブ

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

16.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 になります。ジョブが完了すると,システムはログ・ファイルを印刷し,ディレクトリから削除します。ログ・ファイルのセーブについては,第 16.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


前へ 次へ 目次 索引