IBM Support

中断作业退出 - 调用另一个作业的程序

Technical Blog Post


Abstract

中断作业退出 - 调用另一个作业的程序

Body

中断作业退出 - 调用另一个作业的程序

在之前关于QTEMP的博客中,最后我提到了将撰写关于作业中断退出程序的博客。

在5.4版本中,引入了作业中断的能力,它允许在指定的作业中运行程序。5.4版本以前,如果用户想在不同的作业中运行一个程序,基本上只能使用提交作业的命令来启动新的作业,然而有时候,需要在一个已经启动的作业里运行程序。作业中断便赋予了这种能力。

这个功能有两个主要的组成部分:

控制该功能是否启用的能力

在目标作业中请求和执行程序的编程接口

允许作业被中断(QALWJOBITP)系统值用于控制在整个系统中是否允许中断另一个作业来调用某个程序。该系统值有3个选项:

0 – 作业不可中断 (默认)

1 – 作业可中断,但新作业默认不可中断

2 – 作业可中断,而且新作业默认可中断

这个系统值是个“大开关”:把它设为0就能在系统范围内禁止该能力。为了在另一个作业中调用程序,必须把该值设为1或2。该系统值能被更进一步地控制,因为它是能被锁定的系统值之一,即如果被锁定,在正常的系统运行过程中就无法改变它。在IBM i 信息中心的“lock function of security system values”页面中有这个话题的论述。如果你想改变一个用这种方式锁定的系统值,你必须在系统服务工具(SST)中启用参数“允许安全相关的系统值改变”。

如果该系统值被设置为1或2,对这个功能的控制就降到作业级别。新作业的默认可中断属性来自作业启动时的系统值,改变作业中断状态(QWCCJITP)API能用来获取或改变给定作业的可中断状态。该API能获取和随意修改作业的可中断状态。如果某个作业被修改为可中断,中断作业API调用的程序将能在这个作业中运行。

在另一个作业中调用程序分为2部分:在一个作业中指定目标作业和其要运行的程序的API,以及在目标作业中用于调用被执行的程序的退出程序。

发起请求的作业使用调用作业中断程序(QWCJBITP)API来指定某个程序,以及将要调用该程序的作业。目标作业必须是活动的,而且不能是系统作业、子系统作业或者假脱机读取或写入作业。如果“允许作业被中断”系统值被设为0,该API会返回一个错误。如果这个系统值被设为1或2,则目标作业的实际可中断状态决定了该功能是否被允许。

如果目标作业可中断,它就会通过调用作业中断退出程序(退出点QIBM_QWC_JOBITPPGM)来运行指定的程序。该退出点必须定义在系统注册信息中。该程序在目标作业的初始线程中运行,如果目标作业有多个线程,其他的线程将不被影响。另外,该退出程序会运行在发起请求的作业的用户概要文件下,也就是说目标作业的用户概要文件会被替换为调用该API的作业的用户概要文件。

如果在目标作业程序的运行过程中发生任何错误,那么我们需要在目标作业中关注这些错误,例如在它的作业日志中记录消息。

正如你所看到的,在目标作业中运行一个程序有许多要素,而且默认是不能这样做的。你可能不会经常需要这个功能,但是当你正在开发用来帮助特定的系统管理需求的工具,尤其是需要在一个作业中使用编程接口来操作或者管理其他作业时,它就非常有用了。

 
原作者:Dawn May
翻译:Xu Hai Tao

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB57","label":"Power"}}]

UID

ibm11145530