当我在 REXX exec 中从 LINKPGM 获得 RC (-2) 时,这意味着什么?

问题描述

我从这个网址“借用”了 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 的 EXecution 之外)?我也对这个 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 的输出

EXECUTIL Output when running called from TEST1

当我直接从命令行运行 LPINFOX.EXEC 时,输出是一样的,除了地址 LINKpgm IWMQVS 工作正常:

EXECUTIL Output when running from the command line

我只能推测,当我运行“独立”exec 时与从另一个 exec 运行 exec 时存在一些环境差异。

PS(2),每个关于用 phunsoft 的 IEFBR14 替换 IWMQVS 的问题:

将程序更改为 IEFBR14 不会改变结果,RC=-2。

enter image description here

解决方法

LINKPGM 是 TSO/E REXX 主机命令环境,所以需要在 TSO/E REXX Reference 中搜索。从那本书:

此外,对于 LINKMVS、ATTCHMVS、LINKPGM 和 ATTCHPGM 环境中,RC 中设置的返回码可能是 -2,表示处理 的变量没有成功。变量处理可能已经 不成功,因为主机命令环境无法:

o 在链接或附加程序之前执行变量替换

o 程序完成后更新变量

不看代码很难说出问题是什么。

您可能希望使用 REXX 的跟踪功能进行调试。你从 TSO/E 前台运行这个 REXX 吗?如果是这样,您可以在启动 REXX 之前运行 TSO EXECUTIL TS。然后它会像 trace ?i 被指定为代码的第一行一样运行。

我看过 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 时,您是否也这样做过?