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

前へ | 次へ | 目次 | 索引

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

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

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

## 18.4.1 ターミナルの切断

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

- ホストとターミナル間でモデム・シグナルを消失した。

- TT2$M_SECURE 属性を設定した状態でターミナル上で BREAK キーを押した。

- DCL の DISCONNECT コマンドを入力した。

- DCL の CONNECT/CONTINUE コマンドを入力した。

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

        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

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

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

- 完全ファイル指定を使用する。
  コマンド・プロシージャの中のファイルを参照したり，ファイルをコマンド・プロシージャに渡す場合には，ファイル指定の一部としてデバイス名とディレクトリ名を指定する。

- SET DEFAULT コマンドを使用する。
  コマンド・プロシージャの中のファイルを参照する前に，コマンド・プロシージャの始めに SET DEFAULT コマンドを使用して，正しいデバイスとディレクトリを指定する。

バッチ・ジョブを実行すると，出力をログ・ファイルに書き込みます。省略時の設定では，ログ・ファイルはキューに登録するコマンド・プロシージャと同じ名前を持ち，ファイル・タイプは .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 をターミナルに再定義することはできません。バッチ・ジョブに入力を渡すには，次のいずれかの方法を使用します。

- コマンド・プロシージャ自体にデータを指定する。
  コマンド・プロシージャにデータを指定するには，コマンドまたはイメージの後の行にデータを置きます。

- SYS$INPUT を一時的にファイルとして定義する。
  SYS$INPUT を一時的にファイルとして定義するには， DEFINE/USER_MODEコマンドを使用します。

- コマンド・プロシージャをキューに登録して実行するときに，コマンド・プロシージャにパラメータを渡す。
  コマンド・プロシージャにパラメータを渡すには，バッチ・ジョブをキューに登録するときに /PARAMETERS 修飾子を使用します。

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 コマンドを指定します。

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

- コマンド・プロシージャの中で PRINT コマンドの代わりに TYPE コマンドを使用する。 TYPE コマンドは SYS$OUTPUT に書き込みを行う。バッチ・ジョブでは，SYS$OUTPUT はバッチ・ジョブ・ログ・ファイルに等しく定義される。

- 修飾子または該当するコマンドを使用して，出力を SYS$OUTPUT に向ける。
  この方法を使用する場合，ログ・ファイルをセーブしない限り，出力ファイルはディスクにセーブされないことに注意してください。

このコマンド・プロシージャの処理が終了すると，バッチ・ジョブ・ログ，コンパイラ・リスト，リンカ・マップの 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

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

前へ | 次へ | 目次 | 索引