当我在 REXX 执行程序中从 LINKPGM 获得 RC (-2) 时,这意味着啥?
Posted
技术标签:
【中文标题】当我在 REXX 执行程序中从 LINKPGM 获得 RC (-2) 时,这意味着啥?【英文标题】:What does it mean when I get a RC (-2) from LINKPGM in a REXX exec?当我在 REXX 执行程序中从 LINKPGM 获得 RC (-2) 时,这意味着什么? 【发布时间】:2021-03-19 03:16:43 【问题描述】:我从这个网址“借用”了 LPINFOX REXX 程序:[http://www.longpelaexpertise.com/toolsLPinfoX.php]
当我“直接”运行它时(EX 'hlq.EXEC(LPINFOX)')它运行良好:
------------------------------------------------------
LPInfo: Information for z/OS ssssssss as of 18 Mar 2021
------------------------------------------------------
z/OS version: 02.04
Sysplex name: LOCAL
JES: JES2 z/OS 2.4 (Node nnnn)
Security Software: RACF
CEC: 3907-Z02 (IBM Z z14 ZR1)
CEC Serial: ssssss
CEC Capacity mmmm MSU
LPAR name: llll
LPAR Capacity mmm`enter code here` MSU
Not running under a z/VM image
但是,如果我将调用插入另一个 exec,我会从地址 LINKPGM 调用中得到一个 RC -2:
------------------------------------------------------
LPInfo: Information for z/OS ssssssss as of 18 Mar 2021
------------------------------------------------------
z/OS version: 02.04
Sysplex name: LOCAL
JES: JES2 z/OS 2.4 (Node N1)
Security Software: RACF
79 - Address Linkpgm 'IWMQVS QVS_Out'
+++ RC(-2) +++
CEC: -
CEC Serial:
LPAR name:
Not running under a z/VM image
我确定这与第二级 REXX 程序的运行有关,但我能做些什么来处理错误(除了排队第二个 REXX 的执行)?我也对这个 RC 的记录位置感到困惑……我在 Google 上搜索“REXX ADDRESS RC -2”的结果很短。
谢谢, 斯科特
PS(1),根据@phunsoft 的回答:
有趣。我没有将代码复制到我的另一个 REXX。我从另一个 rexx 中调用了 LPINFOX:我有一个 hlq.LOGIN.EXEC,其中有一个“EX 'hlq.LPINFOX.EXEC”语句。当我将第一个 exec 减少到“TEST1”(如下)时,它以同样的方式失败:
/* REXX */
"EXECUTIL TS"
"EX 'FAGEN.LPINFOX.EXEC'"
exit 0
当我运行 TEST1 时,这是来自 IWMQVS 调用周围的 EXECUTIL 的输出:
当我直接从命令行运行 LPINFOX.EXEC 时,输出是一样的,除了地址 LINKPGM IWMQVS 工作正常:
我只能推测,当我“独立”运行 exec 与从另一个 exec 运行 exec 时存在一些环境差异。
PS(2),关于用 phunsoft 的 IEFBR14 替换 IWMQVS 的问题:
将程序更改为 IEFBR14 不会改变结果,RC=-2。
【问题讨论】:
我看不出应该有什么区别,但是,显然有一些。不确定下一步可能是什么。想... 当您编辑 PLINFOX REXX 并将“IWMQVS”更改为“IEFBR14”时会发生什么?它仍然失败吗? 是的,它仍然失败,完全相同的方式。它似乎与被调用的程序没有任何关系。参见上面的 PS(2)。 好吧,IEFBR14 不是最佳建议,因为我们仍然不知道程序是否被实际调用。 RC = -2 表示调用程序之前的变量处理问题,或者从程序返回后的变量处理问题。但是 IEFBR14 没有操作数据区,所以我猜问题是在调用程序之前。这有什么帮助?嗯,没什么,我害怕。您的 TSO 会话是否有可能耗尽存储空间? 您可以查看系统跟踪信息,并希望能找到有关正在发生的事情的提示。 【参考方案1】:LINKPGM
是一个TSO/E REXX主机命令环境,所以需要在TSO/E REXX参考中搜索。从那本书:
此外,对于 LINKMVS、ATTCHMVS、LINKPGM 和 ATTCHPGM 环境中,RC中设置的返回码可能为-2,表示处理 的变量没有成功。可变处理可能是 失败,因为主机命令环境不能:
o 在链接或附加程序之前执行变量替换
o 程序完成后更新变量
不看代码很难说是什么问题。
您可能希望使用 REXX 的跟踪功能进行调试。您是否从 TSO/E 前台运行此 REXX?如果是这样,您可以在启动 REXX 之前运行 TSO EXECUTIL TS
。然后它将像trace ?i
wa 指定为代码的第一行一样运行。
我查看了 LPINFOX EXEC 并看到变量 QVS_Out
在链接到 IWMQVS
之前设置如下:
QVS_Outlen = 500 /* Output area length */
QVS_Outlenx = Right(x2c(d2x(QVS_Outlen)),4,d2c(0))
/* Get length as fullword */
QVS_Out = QVS_Outlenx || Copies('00'X,QVS_Outlen-4)
当您将呼叫复制到其他 REXX 时,您是否也这样做了?
【讨论】:
查看我添加到原始问题的 PS 中的信息。以上是关于当我在 REXX 执行程序中从 LINKPGM 获得 RC (-2) 时,这意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章
当我在 Swift 中从音乐库中选择歌曲时,为啥我的应用程序会崩溃?
尝试在批处理环境中执行 REXX 或 TSO 命令时尝试绕过错误
当我在我的 android 应用程序中从图库中加载图像时,为啥位图返回较小的图像?