IKJEFT01は、TSOのコマンドシェル・プログラムです。TMP(Terminal Monitoe Program:端末モニタープログラム)と呼ばれ、TSOセッションの開始を行います。ログオン・プロシージャーと呼ばれるJCLのEXECステートメントに定義して、ログオンが完了したユーザーのTSOユーザー空間を起動するために使われます。端末からのオンライン利用だけでなく、バッチ・ジョブとしても実行することができ、バックグラウンドでTSOコマンドを実行することができます。同じコマンドを何度も繰り返したり、作業内容と結果を記録したい場合などに利用できます。バッチ・ジョブとしてTSOセッションを実行するJCLのサンプルは、「TSOバッチ・セッション」に載せてあります。
TMPの実行
1 2 3 4 5 6 7 |
//TSOBATCH EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSPROC DD DISP=SHR,DSN=MY.CLIST //SYSTSIN DD * ALLOC DD(SYSUT1) DA('MY.TESTDATA') TSOコマンドの実行 %MYCLIST1 CLISTの実行 // |
TMPのプログラム名は、IKJEFT01です。MSPではKEQEFT01、VOS3ではJETTFT01です。SYSTSINに実行したいコマンドを指定します。複数指定すれば、指定した順序で順番に実行されます。コマンドまたはプログラム(CALLコマンドで呼び出す等)がエラーで終了しても、ただちにTSOセッションは終了しません。後続のコマンドがあれば、処理が続けられます。バッチ・セッションの場合は、最後に実行したコマンドの戻りコードがステップの完了コードとなります。ただし、コマンドまたはプログラムがABENDした場合は、そこで処理は打ち切られ、ステップの完了コードには12が設定されます。(MSPやVOS3でも同様の動きと思いますが、実際に完了コードがどう設定されるかは、実機を使える方はご自分で確認してみて下さい)
z/OSの場合、TMPの代替の入口点名(IKJEFT1AまたはIKJEFT1B)が使用できます。IKJEFT1Aまたは1Bでは、実行したコマンドがエラーになった時の動き方が変わります。後続のコマンドがどうなるか、ステップの完了コードはどう設定されるかが、IKJEFT01とは異なります。基本的には、途中でコマンドがエラーになっても、指定したコマンドを最後まで実行させたいならIKJEFT01を、エラーになったところで処理をやめたいならIKJEFT1AまたはIKJEFT1Bを使用します。
TMP入口点名による動きの違い(MVS)
コマンドが0でない 戻りコードで終わった時 |
コマンドがABENDした時(Unnnn) | コマンドがABENDした時(Sxxx) | |
---|---|---|---|
IKJEFT01 | 次のコマンドがあれば処理を続ける。 ステップの完了コードは最後のコマンドの戻りコード。 |
次のコマンドは実行されない。 ステップの完了コードは12。 |
←(左に同じ) |
IKJEFT1A | 次のコマンドは実行されない。 ステップの完了コードは最後のコマンドの戻りコード。 |
次のコマンドは実行されない。 ステップの完了コードは、 ユーザーABENDコードと同じ。 |
次のコマンドは実行されない。 ステップの完了コードはS04C。 |
IKJEFT1B | 次のコマンドは実行されない。 ステップの完了コードは最後のコマンドの戻りコード。 |
次のコマンドは実行されない。 ステップの完了コードはS04C。 |
←(左に同じ) |
- TSOセッションで実行したコマンドが正しく終了したかどうかで、後続のステップの実行をコントロールしたいなら、必要に応じて適切なプログラム名を選べます。
CLISTの中でコマンドがエラーになった時
IKJEFT01では、CLIST内で実行したコマンドがエラーになっても、CLIST自体がノーマルに終われば完了コードは0となります。これを防ぐにはEXITステートメントでCLISTの戻りコードを明示的に指定します。
1 2 3 |
PROC 0 CALL *(MYPGM) 'MODE=PRODRUN' EXIT CODE(&MAXCC) |
IKJEFT1Aおよび1Bでは、EXITステートメントがなくてもエラーになった時点で処理が打ち切られ、完了コードもエラーの戻りコードで設定されます。ただし、コマンドのエラーではなく、単にEXITステートメントのCODEパラメーターで0以外のコードを指定したような場合は、打ち切られずに後続の処理が行われます。
1 2 |
PROC 0 EXIT CODE(28) |