EXEC Statement

The program needed to execute TSO/E commands from the background is a terminal monitor program (TMP), which may be one of the following: IKJEFT01, IKJEFT1A, or IKJEFT1B. The EXEC (execute) statement is used to execute program IKJEFT01 or the alternate programs IKJEFT1A and IKJEFT1B. The format is:
//stepname EXEC PGM=IKJEFT01,DYNAMNBR=nn,PARM='command'
or
//stepname EXEC PGM=IKJEFT01,DYNAMBR=nn,PARM='command'
Note: The TSO/E terminal monitor program must not run as a V=R program. Executing the TMP as V=R will cause unpredictable results.
Note: If the caller wishes to pass a command string longer than 100 characters to IKJEFT01, you should use the PARMDD= keyword of the EXEC statement of JCL, as shown above.
stepname
is optional and can be used as a step identifier in programs consisting of more than one step.
EXEC
is the JCL term that identifies this type of statement.
PGM=
specifies the module being executed. In addition to IKJEFT01, there are two other entry points available for background execution that provide additional return code and abend support.
Note: If the STEP parameter is coded in an ABEND macro, the job will abnormally terminate with the system or user abend specified. TSO/E cannot recovery normally from an ABEND with the STEP parameter because retry processing is not allowed.
The differences among the three entry points are:
  • PGM=IKJEFT01
    • When a command completes with a non-zero return code, the program goes to the next command. When a command abends, the step ends with a condition code of 12 (X'C').
  • PGM=IKJEFT1A
    • If a command or program being processed by IKJEFT1A ends with a system abend, IKJEFT1A causes the job step to terminate with a X'04C' system completion code. IKJEFT1A also returns to the caller the completion code from the command or program in register 15.
    • If a command or program being processed by IKJEFT1A ends with a user abend, IKJEFT1A saves the completion code in register 15 and then terminates.
    • If a command, program or REXX exec being processed by IKJEFT1A returns a non-zero return code to IKJEFT1A, IKJEFT1A saves this return code in register 15 and then terminates. Non-zero return codes to IKJEFT1A from CLISTs will not affect the contents of register 15 and the TMP will continue processing.
    • For a non-zero return code or an abend from a command or program that was not given control directly by IKJEFT1A, no return code is saved in register 15, and IKJEFT1A does not terminate.
    Note: When a command is invoked in a CLIST, that command is actually processed by the TMP (Terminal Monitor Program). From that command, termination of IKJEFT1A with a non zero return code and flushing of the remainder of the CLIST occur. This is different from the case when a command is invoked directly by a REXX exec.
  • PGM=IKJEFT1B
    • If a command or program being processed by IKJEFT1B ends with a system or user abend, IKJEFT1B causes the job step to terminate with a X'04C' system completion code. IKJEFT1B also returns to the caller the completion code from the command or program in register 15.
    • If a command, program or REXX exec being processed by IKJEFT1B returns a non-zero return code to IKJEFT1B, IKJEFT1B saves this return code in register 15 and then terminates. Non-zero return codes to IKJEFT1B from CLISTs do not affect the contents of register 15 and the TMP continues processing.
    • For a non-zero return code or abend completion code from a program or command that was not given control by IKJEFT1B, no return code is saved in register 15, and IKJEFT1B does not terminate.

See z/OS TSO/E Customization for information on abend and non-zero return code processing by these alternate programs, as well as conditional disposition processing for data sets.

DYNAMNBR=
indicates the number of system resources the system should hold in anticipation of reuse. For information on the specific number of allocations you can specify, see z/OS MVS JCL Reference.
PARM=
is optional and can be used to supply the first (or only) command to be executed. This is used most often when you only execute one command in the step.
PARMDD=ddname
is optional and can be used instead of PARM= to supply the first (or only) command to be executed. Use PARMDD specifying the ddname of a data set containing the command parmstring to be executed if the command parmstring is more than 100 characters in length.