当我在 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 应用程序中从图库中加载图像时,为啥位图返回较小的图像?

我可以使用 Rexx 在 zos 中读取数据集的分配参数吗?

使用 REXX 执行 DFSORT

当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏