[an error occurred while processing this directive]

HP OpenVMS Systems Documentation

Content starts here

OpenVMS 用户手册


前页 目录 索引

16.4 连接虚拟终端上的断开进程

如果允许虚拟终端但已失去调制解调器线路连接,那么一个进程作为断开虚拟终端的进程在系统上保持活动。必须在系统管理员指定的时段内 (默认值是 900 秒或 15 分钟) 重新连接这个进程。如果在这个时间满期之前不能重新连接到这个进程,那么系统就删除这个进程。

注意

您只可以连接到与您的用户标识码 (UIC) 关联的虚拟终端进程。

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

16.4.2 除去断开进程

在一定的间歇时间之后,系统自动除去断开的进程。然而,如果直接注销任何断开的进程,就可以保存系统资源,如下所示:

步骤 任务
1 输入 DCL 命令 SHOW USERS 确定是否有其他断开的作业。
2 输入 DCL 命令 CONNECT/LOGOUT 注销当前进程。接回每个关联的虚拟终端 (注有终端前缀 VTA ) 直到达到最后一个现有进程。
3 输入 DCL 命令 LOGOUT。

16.4.3 管理断开进程

虚拟终端允许您每次维护一个以上断开的进程。然而,必须紧记,当注册到虚拟终端时,物理终端是断开的。任何指引到不是当前虚拟终端进程关联的物理终端的设备的 I/O 请求将进入等待状态。当超时满期时,暂挂进程将终止。然而,如果您重新连接到接收该 I/O 请求的物理终端,那么这个进程将从进入等待状态的位置继续。用与其上下文相关的名称命名每个进程,可以更容易重新连接要求的进程。

例如,一个运行编辑文件进程的用户 SMITH 可以使用 SET PROCESS/NAME 命令命名该进程为 SMITH_EDIT。以后,要继续编辑,SMITH 可以容易地确定哪个进程是适当的。

系统管理员可以全系统地或基于每个终端地限制虚拟终端的使用。

16.5 处理批量作业

批量作业是非交互进程。因为批量作业在自己的进程中执行,您可以有两个或更多的进程同时做不同的事情。例如,可以使用批量作业来:

  • 在系统以批量模式执行程序或命令过程的同时,交互地执行任务。
  • 运行需要长时间执行的命令过程。
  • 在几小时后执行命令过程或程序。
  • 在降低的优先级运行某些程序 (例如,如果程序使用不成比例数量的系统资源)。

16.5.1 提交批量作业

提交批量作业时,系统使用您的帐户和进程特征建立一个分离进程。系统从该进程运行此作业,并且当作业完成时删除这个进程。系统也执行系统注册命令过程 (SYLOGIN.COM) 和您的注册命令过程 (LOGIN.COM),然后执行在批量作业中的命令过程。当这些过程执行时,输出将写入日志文件。当批量作业完成时,可以打印这个日志文件,或者把它保存在您的一个目录中。

要按批量模式运行作业,就可输入 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 命令,可以获得作业项号。) 注意,如果在批量作业中提交多个过程,那么当任何过程带出错或致命的 (严重的) 系统消息退出时,该批量作业将终止。

批量作业不必在把它提交到批队列时开始运行。要指定不同时间,输入 SUBMIT/AFTER 命令。在以下例子中,作业在 11:30 P.M. 之后提交:


$ SUBMIT/AFTER=23:30 JOB1.COM

把命令过程提交为批量执行时,系统保存这个命令过程的完整文件说明,包括版本号。如果把命令过程提交之后要更新它,那么批量作业执行提交命令过程的原有版本,而不是新版本。

因为注册的默认目录通常不是在命令过程中存取文件所需要的默认目录,因此使用以下方法之一确保存取正确的文件:

  • 使用完整文件说明 --- 在命令过程中引用一个文件时或者把一个文件传递给一个命令过程时,包括设备和目录名作为文件说明的一部分。
  • 使用 SET DEFAULT 命令 --- 在命令过程中在引用一个文件之前,在命令过程的开始使用 SET DEFAULT 命令指定适当的设备和目录。

批量作业执行时,它把输出写入日志文件。按照默认,日志文件与提交的命令过程同名,但文件类型为 .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 命令时,在一个作业中可以指定要执行的几个命令过程。除非使用 /NAME 限定词指定名称,否则 SUBMIT 命令使用第一个命令过程的名称作为作业名。注意,如果一个出错引起作业中的任何命令过程退出,那么整个作业终止。

批量作业执行时,第一个过程 (UPDATE.COM) 的操作上下文不保留给第二个过程 (SORT.COM)。在 SORT.COM 执行之前,系统删除 UPDATE.COM 建立的局部符号。然而,保留全局符号。

不能在单个作业中为个别命令过程指定不同参数。

在以下例子中,SUBMIT 命令建立一个先执行 UPDATE.COM 然后执行 SORT.COM 的批量作业:


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

以下例子把同样的两个参数传递给 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

16.5.2 传递数据给批量作业

批量作业的默认输入流 (SYS$INPUT) 是正在执行的命令过程。因为分离进程正在执行批量作业,因此不能把 SYS$INPUT 重新定义到终端 (而当您交互执行命令过程时则可以。)。要把输入传递给批量作业,使用以下技术之一:

  • 把数据包括在命令过程本身。
    要将数据包括在命令过程中,把数据放置在命令或映象之后的代码行中。
  • 临时把 SYS$INPUT 定义为一个文件。
    要临时把 SYS$INPUT 定义为一个文件,使用 DEFINE/USER_MODE 命令。
  • 当提交命令过程执行时,把参数传递给这个命令过程。
    要把参数传递给命令过程,当提交这个批量作业时使用 /PARAMETERS 限定词。

注意,不能在单个作业中为个别命令过程指定不同参数。如果需要传递不同参数,那么使用单独的 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 命令显示批队列中所有作业的全部信息。这个显示包括传递给过程的任何参数。因此,不要把机密信息 (例如密码) 传递给批量作业。

16.5.3 控制批量作业输出

按照默认,日志文件与在批量作业中的第一个命令过程同名,并且文件类型为 .LOG。系统每分钟一次把批量作业的输出写入日志文件。要指定不同的时间间隔,把 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 和 /NOPRINTER 限定词把日志文件保存在默认注册目录中。日志文件与在批量作业中的第一个命令过程同名,并且文件类型是 .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 命令 用于打印。

如果想要批量作业记录包含命令过程的所有输出,包括编译程序的打印列表或链接程序的输出文件,那么可以做以下任意一个:

  • 在命令过程中使用 TYPE 命令代替 PRINT 命令。TYPE 命令写入 SYS$OUTPUT。在批量作业中,SYS$OUTPUT 等同于批量作业日志文件。
  • 使用适当命令的限定词把输出指引到 SYS$OUTPUT。
    注意,如果使用这个技术,那么输出文件不再保存在磁盘上,除非您保存日志文件。

在以下例子中展示的命令过程完成处理时,有三个单独的输出列表: 批量作业记录、编译程序列表和链接程序映象:


$ 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

这些命令在批量作业中执行时,来自编译程序和链接程序的输出文件直接写入日志文件。

16.5.4 更改批量作业的特征

在作业提交到队列之后但在作业开始执行之前,可以使用带适当限定词的 SET ENTRY 或 SET QUEUE/ENTRY 命令更改与作业相关的特征。

以下例子展示当批量作业暂挂在批队列中时可以用来更改批量作业名的两个方法:


$ 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 命令。

您可以进行以下更改:

  • 延迟处理作业。
    使用 /AFTER 限定词指定一个时间,在这个时间之后作业才可以执行。使用 /HOLD 限定词保持作业,直到明确释放它。
  • 释放作业。
    使用 /NOHOLD 或 /RELEASE 限定词释放用 /HOLD 或 /AFTER 限定词提交的作业。
  • 把作业发送给不同队列。
    使用 /REQUEUE 限定词更改将执行作业的队列。
  • 更改执行特征。
    更改执行特征,例如工作区默认、工作区范围、工作区大小、作业调度优先级和 CPU 时间限制。
  • 更改传递给作业的参数。
    使用 /PARAMETERS 限定词更改参数。

16.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 命令查看作业的完成状态。


前页 后页 目录 索引