HP OpenVMS Systems Documentation |
OpenVMS 用户手册
13.11.2 停止特权映象
在中断执行特权映象时,如果要保存映象的上下文可以输入 CONTINUE、SPAWN 或 ATTACH 命令。如果输入任何其他命令 (除在派生或附加子进程内的命令之外),特权映象就被强制退出。
以下几节描述如何设置 Ctrl/Y 动作例行程序。 ON 命令定义在出错情况下采取的动作,它提供一个方法为在命令过程执行期间发生的 Ctrl/Y 中断定义一个动作例行程序。您指定的动作取代默认 Ctrl/Y 动作 (即在 Ctrl/Y 命令级提示输入命令)。例如:
如果过程执行这个 ON 命令,那么在过程执行期间的后续 Ctrl/Y 中断使这个过程退出。控制被传递给上一个命令级。 当按下 Ctrl/Y 中断使用 ON CONTROL_Y 的过程时,采取以下动作:
13.12.2 输入 Ctrl/Y 的效果执行 Ctrl/Y 不会自动重新设置默认的 Ctrl/Y 动作 (即在 Ctrl/Y 命令级提示输入命令)。Ctrl/Y 动作保持有效直到发生以下条件之一:
Ctrl/Y 动作可以在每个活动命令级指定,并且只影响指定此命令级。 以下例子展示的命令过程执行时,每个 Ctrl/Y 中断导致执行 SHOW TIME 命令。在每个 SHOW TIME 命令执行之后,过程恢复执行在中断命令之后的命令。
图 13-2 说明 Ctrl/Y 中断后的执行流。 图 13-2 Ctrl/Y 动作后的执行流
图 13-3 说明在嵌套命令过程执行期间按下 Ctrl/Y 时会发生什么事情。 图 13-3 在嵌套过程中的 Ctrl/Y
13.13 撤消和允许 Ctrl/Y 中断
以下几节描述如何撤消和允许 Ctrl/Y
中断。
SET NOCONTROL=Y 命令撤消 Ctrl/Y 处理。即是说,如果命令过程执行 SET NOCONTROL=Y 命令,按下 Ctrl/Y 就没有效果。 SET NOCONTROL=Y 命令也取消当前用 ON CONTROL_Y 命令建立的 Ctrl/Y 动作。要重新建立默认 Ctrl/Y 动作,使用以下两个命令:
SET NOCONTROL=Y 命令撤消 Ctrl/Y 处理,并取消当前 ON CONTROL_Y 动作。SET CONTROL=Y 命令允许 Ctrl/Y 处理。在这一点上,默认动作就被复原。即是说,如果在过程执行期间按下 Ctrl/Y,那么命令解释程序就在 Ctrl/Y 命令级提示输入命令。
可以在任何命令级使用 SET NOCONTROL=Y 命令。它影响所有命令级,直到 SET CONTROL=Y 命令重新允许
Ctrl/Y 处理。
ON CONTROL_Y 命令保持有效,直到执行另一个 ON CONTROL_Y 或 SET NOCONTROL=Y 命令,或者命令过程退出。 当 Ctrl/Y 撤消时,要退出无尽循环必须从另一个终端使用 DCL 命令 STOP 删除您的进程。如果撤消默认 Ctrl/Y 动作,就尽快重新设置它。要重新设置默认 Ctrl/Y 动作,就执行 SET NOCONTROL=Y 命令,后面跟随 SET CONTROL=Y 命令。 在这个命令过程中,当文件正在被键入时按下 Ctrl/Y 就把控制传递给标号 END_TYPE:
13.14 在命令过程中使用条件码检测出错在命令过程中的每个 DCL 命令执行完成时,命令解释程序保存描述命令终止原因的条件代码。这个代码可以指出成功完成,或者标识一个通知或出错消息。
命令解释程序检查在执行命令过程的每个命令之后的条件代码。如果发生一个需要特殊动作的出错,系统就执行这个动作。否则,执行过程的下一个命令。
命令解释程序把条件代码保存为在保留全局符号 $STATUS 中的 32 位长字。$STATUS 符号符合系统管理代码的格式,如下所示:
命令成功完成时,$STATUS 有一个奇数值。(位 0--2 包含 1 或 3。) 发生任何类型的警告或出错时,$STATUS 有一个偶数值。(位 0--2 包含 0、2 或 4。) 命令解释程序维护和显示 $STATUS 当前的十六进制值。通过输入 SHOW SYMBOL $STATUS 命令,可以显示 $STATUS 的 ASCII 翻译。 在以下例子中,文件名 (%FRED.LIS) 输入错误:
13.14.2 使用 EXIT 命令返回条件码命令过程退出时,命令解释程序在 $STATUS 中返回上一个命令的条件代码。条件代码提供有关最近命令是否成功执行的信息。 在命令过程中使用 EXIT 命令时,可以指定一个值取代 DCL 将赋予 $STATUS 的值。这个值,被称为状态码,必须指定为一个整型表达式。 命令过程包含建立多个命令级的嵌套过程时,可以使用 EXIT 命令返回一个明确取代默认条件码的值。 检查以下两个命令过程:
B.COM 中的
ON 命令意味着,当 B.COM
执行时如果有任何警告、出错或严重出错,这个过程就被指引到标号 ERROR。这里,条件代码明确设置为 1,指出成功。因此,当 B.COM 终止时,它传递一个成功代码给 A.COM,而不管是否出错。 $STATUS 的低端 3 位表示引起命令终止条件的严重性。这部分条件代码包含在保留的全局符号 $SEVERITY 中。$SEVERITY 符号的值可以是 0 至 4 ,其中每个值表示以下严重级之一:
注意,成功和通知代码有奇数值,而警告和出错代码有偶数值。 使用对 $SEVERITY 或 $STATUS 执行逻辑测试的 IF 命令,可以测试命令是否成功完成,如下所示:
如果 $SEVERITY 和 $STATUS 有真 (奇) 值, 这些 IF 命令就把控制流转移到标号 OKAY。当 $SEVERITY 和 $STATUS 的当前值是奇数时,命令或程序就成功完成。如果命令或程序没有成功完成,那么 $SEVERITY 和 $STATUS 就是偶数;因此,IF 表达式为假。 代替测试条件是否为真,您可以测试它是否是假。例如:
命令解释程序使用条件代码的严重级确定是否采取 ON 命令定义的动作,如 13.9 节
所述。 调用系统公用程序的大多数 DCL 命令完成时会产生状态值和出错消息。然而,有几个命令成功完成时不更改 $STATUS 和 $SEVERITY 的值。这些命令如下所示:
如果这些命令的任意一个导致不成功状态,那么其条件代码将被放入 $STATUS,而其严重级被放入
$SEVERITY。
注册命令过程是一个每次注册时操作系统就会自动执行的命令过程。在提交的每个批量作业开始时,系统也执行这个过程。 有两类注册命令过程:
13.16.1 全系统注册命令过程全系统注册命令过程有以下特征:
要建立全系统注册命令过程,您的系统管理员使逻辑名 SYS$SYLOGIN 等同于适当的注册命令过程。系统管理员可以指定这个注册命令过程用于所有系统用户或某些用户组。 您可以建立一个个人注册命令过程使每次注册时执行同样的命令。 系统管理员为注册命令过程分配文件说明。在大多数安装中,注册命令过程被称为 LOGIN.COM。因此,应该把注册命令过程命名为 LOGIN.COM,除非系统管理员告诉您其他文件名。 以下是一个 LOGIN.COM 过程的例子:
13.16.3 受约束帐户的注册命令过程
把特殊命令过程的名称放入用于您的帐户的 LGICMD
字段,您的系统管理员可以设置受约束帐户。如果注册到一个受约束帐户,那么在命令过程中只可以执行为您帐户指定的功能;不能使用全部的 DCL 命令。有关受约束帐户的详情,请参阅 OpenVMS System Manager's Manual。 需要特定文件名分析样式的命令过程可以在过程中包括转换样式的命令。以下命令过程保存当前分析样式,设置分析样式为 TRADITIONAL,执行 (未指定的) 命令,然后恢复已保存的分析样式。
第一个命令使 'original_style' 等同于当前分析样式。第二个命令把分析样式设置为 TRADITIONAL。最后一个命令把分析样式重新设置为其原始样式。 在 ODS-5 环境下,使用文件名作为参数的命令过程可以产生不同的结果。 您可以从 TRADITIONAL 转换为 EXTENDED 分析样式,而如果您选择这么做,可能影响以下区域 (本节描述):
有关转换分析样式的详情,请参阅 5.3 节。 如果使用间接命令过程,可能需要用引号括住一些过程变元。 以下例子展示当使用同一命令文件 SS.COM 时,TRADITIONAL 和 EXTENDED 分析样式的输出差别:
13.18.2 字母大小写保留和 $FILEDCL 尝试保持文件说明的字母大小写。只有用命令定义公用程序 (CDU) 定义的命令,才能做到这一点。DCL 保持在命令定义文件 (.CLD) 中使用 $FILE 分析类型定义的任何项目的字母大小写。
有关详情,请参阅 OpenVMS Command Definition, Librarian, and Message Utilities Manual。 与省略号替换不同,可以使用和号 (&) 替换在传统分析中保持字母大小写。 以下传统分析例子展示一串更改字符串字母大小写的命令:
注意,使用和号 (&) 保持赋值给 x 变量的字符串字母大小写。 省略号替换发生在命令行设置为大写字母之前,而和号替换发生在命令行设置为大写字母之后。 以下扩展分析例子展示同样的一列命令:
注意,y 变量的两个字符串都返回小写字母。这是因为 DEFINE 命令使用 $FILE,它保持字母大小写。 因此,和号替换可以用来指定扩展文件名,即使分析样式设置为 TRADITIONAL,如以下例子所示:
|