对。这是可能的。没有。没有系统表。
QINACTMSGQ
指向该消息队列。然后,无休止的批处理作业需要监视CPI1126消息。如果它有一个你可以执行你的自定义代码。
IBM文档包含
example
以下是来自IBM页面的CL示例:
以下是执行以下操作的示例CL程序:
-
将控制台和作业留给用户TAA。
-
为用户CKOUR和CHANTHA向工作站发送中断消息。
-
结束工作站P002039的所有作业。
-
作为默认操作断开所有其他作业。
PGM
DCL &THEQUEUE *CHAR 20 /* QINACTMSGQ SYSTEM VALUE */
DCL &INACTLIB *CHAR 10 /* QUEUE'S LIBRARY */
DCL &INACTQUEUE *CHAR 10 /* QUEUE NAME */
DCL &INACTDATA *CHAR 100 /* RAW MESSAGE DATA */
DCL &JOBNAME *CHAR 10 /* INACTIVE JOB NAME */
DCL &USER *CHAR 10 /* INACTIVE JOB USER */
DCL &NUMBER *CHAR 6 /* INACTIVE JOB NUMBER */
DCL &MSGDTALEN *DEC (5 0)
DCL &MSGID *CHAR 7 /* MESSAGE TAKEN FROM THE QUEUE*/
/* */
/* GET THE NAME OF THE QUEUE TO MONITOR FROM THE SYSTEM VALUE */
/* */
RTVSYSVAL SYSVAL(QINACTMSGQ) RTNVAR(&THEQUEUE)
CHGVAR &INACTQUEUE %SUBSTRING(&THEQUEUE 1 10)
CHGVAR &INACTLIB %SUBSTRING(&THEQUEUE 11 10)
/* */
/* MAIN LOOP. */
/* */
LOOP:
/* */
/* WAIT FOR MESSAGE ON THE MESSAGE QUEUE */
/* */
RCVMSG MSGQ(&INACTLIB/&INACTQUEUE) WAIT(*MAX) +
MSGDTA(&INACTDATA) MSGDTALEN(&MSGDTALEN) +
MSGID(&MSGID)
/* */
/* CHECK TO SEE IF IT IS THE RIGHT MESSAGE, IF NOT, SKIP IT. */
/* */
IF (&MSGID *NE 'CPI1126') THEN(GOTO SKIP)
CHGVAR &JOBNAME %SUBSTRING(&INACTDATA 1 10) /* GET JOB NAME */
CHGVAR &USER %SUBSTRING(&INACTDATA 11 10) /* GET USER NAME*/
CHGVAR &NUMBER %SUBSTRING(&INACTDATA 21 6) /* GET JOB NUM */
/* */
/* SPECIAL USERS */
/* */
IF (&USER *EQ 'TAA') THEN(GOTO SKIP) /* leave alone*/
IF (&JOBNAME *EQ 'DSP01') THEN(GOTO SKIP) /* console */
IF (&USER *EQ 'CKOUR') THEN(GOTO ACTION1)
IF (&USER *EQ 'CHANTHA') THEN(GOTO ACTION1)
IF (&JOBNAME *EQ 'P002039') THEN(GOTO ACTION2)
/* */
/* DEFAULT ACTION */
/* */
DSCJOB JOB(&NUMBER/&USER/&JOBNAME)
MONMSG CPF0000 /* VIRTUAL TERMINALS CANNOT BE DISCONNECTED */
/* SO IGNORE ANY MESSAGES THAT MAY CAUSE */
GOTO SKIP
/* */
ACTION1:
SNDBRKMSG MSG('Chantha, you left your terminal on AGAIN!') +
TOMSGQ(&JOBNAME)
GOTO SKIP
/* */
ACTION2:
ENDJOB JOB(&NUMBER/&USER/&JOBNAME)
GOTO SKIP
/* */
/* OTHER ACTIONS GO HERE */
/* */
SKIP:
GOTO LOOP /* GO GET MORE MESSAGES ABOUT OTHER TERMINALS */
ENDPGM