V2R1新功能介绍:Shell终端的超时退出

来源:互联网 发布:arm linux gcc最新版 编辑:程序博客网 时间:2024/05/16 08:26

11/15/2013 Update

====================

转一篇我上周在Developerworks上写的文章。文章贴过来之后,格式有点乱了,建议通过原文链接阅读。

原文链接: https://www.ibm.com/developerworks/community/blogs/IBMzOS/entry/20131101?lang=en



Title: z/OS V2R1 New Function: Timeout in Shell Terminal 

Keywords:  USS,Shell,SMF,Timeout

术语表

TSO:  Time Sharing Option

USS:  UNIX Systems Service

SMF:  System Monitoring Facility

TTY:  Teletype, 用来处理用户输入输出的控制台设备。

摘要

       本文将介绍z/OS V2R1版本的一个新功能:Shell终端超时自动退出。这个功能可简单描述为: 在Shell终端的等待输入状态下,如果超过了指定时间没有按键输入,终端会话将自动退出。 基于这个功能,系统管理员能统一设置Shell终端的超时时间,防止处于等待状态的Shell终端窗口被非授权用户误用。

背景知识

       在V2R1之前的z/OS版本中,USS只提供了环境变量TMOUT来设置Shell终端的超时时间。但系统管理员在/etc/profile统一设置了TMOUT值之后,普通用户还可以通过修改Shell的配置文件.profile重新指定TMOUT,这样便绕过了系统管理的初始超时控制。另外,用户在Shell终端打开OEDIT或vi程序之后,TMOUT作用的计时器会停止计时,Shell终端无法超时退出。所以,USS在V2R1版本中提供了新的系统参数,用来统一指定Shell超时方式,并对在执行OEDIT或vi程序的Shell终端超时退出也提供了支持。

功能介绍

     V2R1版本提供了新的Parmlib参数和Shell环境变量用来设置Shell超时退出方式。新的Parmlib参数名称为PWT

        PWT(SMF|SMFENV|ENV)   

     PWT可以定义BPXPRMxx,该参数设置会影响所有处于等待终端输入状态的USS进程。下面是PWT三个可选参数的说明:

      1>  PWT参数的默认值是ENV,此时USS进程是否会超时退出由Shell环境变量_BPXK_TIMEOUT决定。

      2>  PWT的值为SMF时,USS进程的超时时间由进程所在地址空间对应的SMF参数(JWT/TWT/SWT)来指定。JWT/TWT/SWT分别是针对普通作业(Job)、开始任务(Started Task)TSO/E地址空间的超时值,其中TWTSWT也是V2R1新引入的SMF参数。如果TWTSWT没有在SMF中设置,与之对应类型的地址空间超时值将被直接设置为JWT

      3>  PWT设定SMFENV之后,USS进程的超时值将由SMF参数(JWT/TWT/SWT)指定,同时也允许Shell用户通过_BPXK_TIMEOUT指定超时方式,_BPXK_TIMEOUT会覆盖PWT的设定值。

为了方便Shell用户设置超时方式,V2R1版本中增加了一个Shell环境变量_BPXK_TIMEOUT

           _BPXK_TIMEOUT=NONE|SMF

  

    _BPXK_TIMEOUT是由USS内核处理的Shell环境变量,它的有效值包括:

   空值   沿用PWT设置的超时方式。

   SMF   - 使用SMFPRMxx参数 JWT/TWT/SWT作为超时值

   NONE  - 禁用Shell终端超时退出功能

    _BPXK_TIMEOUT默认值为空。除非在BPXPRMxx指定了PWT参数为SMF,否则_BPXK_TIMEOUT参数将会覆盖PWT的设定值。 

    除了上文介绍的两个参数,V2R1中还引入新的Unix信号SIGTMOUT[3]SIGTMOUT的功能描述如下表:

信号号称

信号值

默认行为

功能描述

SIGTMOUT

40

异常退出

终止处于终端等待状态的进程,此信号不能被捕捉或忽略。SIGTMOUT信号为z/OS保留的信号,不能被应用程序使用。

   

     当Shell会话超时退出时,USS内核向这个会话中的所有进程(绑定相同的TTY的进程)发送SIGTMOUT信号,进程收到此信号后结束,然后系统会在joblog里输出BPXP023I消息,消息内容包含SIGTMOUT信号的收发线程号和进程号。消息格式如下。

      BPXP023I  THREAD tttttttttttttttt, IN PROCESS pppppppp, WAS  TERMINATED BY

SIGNAL SIGTMOUT, SENT FROM  THREAD xxxxxxxxxxxxxxxx, IN

PROCESS ssssssss, UID yyy, IN JOB jobname.     

    此外,如果一个地址空间中只有一个USS进程存在,那么进程收到 SIGTMOUT信号退出,地址空间也随之结束。地址空间结束之后,系统将在syslogjoblog里输出IEF450I消息,如下所示:

      IEF450I WELLIE24 *OMVSEX - ABEND=SEC6 U0000  REASON=0000FF28      

操作步骤

    上一节介绍了与超时退出功能相关的一些参数,本节将结合这些参数介绍系统的配置操作步骤。

   (一) 设置SMF参数。 USS进程的超时值是基于SMF参数(JWT/TWT/SWT)来设定的,所以我们需要先在SMFParmlib成员中SMFPRMxx为不同类型的地址空间指定超时值。

               JWT(hhmm),  

              TWT(hhmm),  

              SWT(hhmm)

    上述三个参数的格式一样,前两位为小时计数值,后两位用分钟。保存SMF设置之后,再输入下面的MVS命令,激活刚才设置的SMF参数。

 

             SET SMF=xx

   接下来可以输入命令D SMF,O,检查SMF超时值是否设置成功,如下例所示:

             D SMF,O

              TWT(0100) -- PARMLIB  

              SWT(0100) -- PARMLIB  

              JWT(0100) -- PARMLIB  

 

    在上述设置中, 三种类型的地址空间的超时值都已设为1小时。

   

  (二)设置PWT参数。PWT参数存放在BPXPRMxx里,我们可以直接修改Parmlib内容,然后用命令“SET OMVS=xx”重新载入OMVS配置;也可以使用SETOMVS命令动态修改PWT的值,如:

       SETOMVS PWT=SMF|SMFENV|ENV

      

     PWT设置成功后,可通过D OMVS,O命令看到当前值。

   (三)设置_BPXK_TIMEOUT。当PWT的参数值设置为SMFENVENV时,系统允许用户在Shell中通过设置环境变量_BPXK_TIMEOUT覆盖系统的设置。在z/OS默认的Shell中,用户通过export命令设置环境变量:

       export _BPXK_TIMEOUT=SMF|NONE

    在TCSH中,则使用setenv命令设置环境变量:

       setenv  _BPXK_TIMEOUT  SMF|NONE

    设置了_BPXK_TIMEOUT变量之后,无论是在默认Shell还是TCSH中,都可以通过env命令验证_BPXK_TIMEOUT的当前值:

      env|grep _BPXK_TIMEOUT

    至此,我们已经完成了Shell超时退出功能的配置,接下来可以试着在OMVS中输入一个命令如ftp,或者通过SSH登陆Shell,打开一个vi,等待设定的时间,Shell终端将自动退出。 此外,为了方便统一配置,系统管理员可以在/etc/profile/etc/csh.cshrc/etc/csh.loginShell配置文件中指定_BPXK_TIMEOUT的值,这样普通用户登录进入Shell终端后,系统会自动载入_BPXK_TIMEOUT变量。

注意事项

       用户在TSO环境进入到OMVS Shell并且PWT被设置为SMF,由于Shell进程默认会在TSO用户的地址空间中创建,Shell进程所在的地址空间为TSO类型,Shell超时值将取决于TWT参数。进一步,用户在OMVS环境中再打开OEDIT窗口,OEDIT程序会创建自己的地址空间,OEDIT所在地址空间为作业(JOB)类型,其超时值取决于JWT参数。所以,此时Shell环境存在两类地址空间,超时值也同时取决于TWTJWT参数。在这种情况下,当TWT参数小于JWT参数时,TSO会话会先超时退出,OMVS环境也会随之结束;当JWT参数小于TWT参数时,OMVS环境会先于TSO超时退出,OMVS退出之前结束已打开的OEDIT程序。

       在z/OS V2R1版本中,除了新引入PWT_BPXK_TIMEOUT参数,原有的Shell环境变量TMOUT也能指定Shell终端的值。当在系统中同时设置了PWTTMOUT参数,TMOUT只有在比SMF指定的超时值更小的情况下才会起作用。例如,SMFPRMxx中设置JWT=(0010)(10分钟),在BPXPRMxx中设置PWT=SMF(超时时间由JWT指定),然后再在Shell中设置TMOUT=3005分钟)。TMOUT小于JWTTMOUT将作用于Shell终端,使之在等待5分钟后退出。

       此外,PWT_BPXK_TIMEOUT参数设置的超时方式只会影响在Shell前台等待TTY输入的进程。如果USS进程处于内核等待状态,例如运行sleep命令挂起进程,或者前台进程等待IO输入输出(读写文件、socket),这样的进程将不能被超时退出。

结束语

        本文先介绍了z/OS V2R1版本中的shell终端超时退出功能的主要特性,如支持vi/oedit编辑器的超时退出、提供了新的全局参数设置超时方式然后描述了相关的系统配置步骤;最后对使用过程中可能出现的几类问题进行了说明。通过阅读本文,z/OS系统管理员能学习到如何统一管理Shell终端的超时时间,从而提高z/OS系统的安全性。普通用户也能了解怎样在Shell环境指定超时方式,以防止自己的Shell终端被非授权用户误用。

参考文档

[1] SA23-1380-00: z/OS MVS Initialization and Tuning Reference

[2] SA23-2279-00: z/OS UNIX System Services Planning

[3] SA23-2281-00: z/OS UNIX System Services Programming Assembler Callable Service