$ZTE[XIT] は、トランザクションのコミットまたはロールバックの時にGT.Mの割り込み機能を制御する式が含まれています。それぞれの最も外側のTCOMMITまたはTROLLBACKの時点で、もし +$ZTEXIT がゼロ以外(TRUE)に評価された場合、$ZINTERRUPTは、コミットまたはロールバックを完了した後で XECUTEされます。
$ZTEXIT は、読み書き可能な固有な特殊変数 ISV (Intrinsic Special Variables)で、すなわち、SETコマンドの引数に等号 (=) の左側で出現が可能です。Mルーチンは、$ZTEXITを変更することはできません。GT.Mはプロセスの起動時に $ZTEXITを null に初期化します。プロセスの全持続期間の最後のGT.M呼び出し中に、$ZTEXITの値への変更なので、それは、すべての後続トランザクションのコミットまたはロールバックごとに再配信する割り込みを止めるために $ZINTERRUPTが配信された後で$ZTEXITをリセットすることは、アプリケーションの責任能力であることに注意してください。
例:
$ export sigusrval=10 $ /usr/lib/fis-gtm/V6.1-000_x86_64/gtm GTM>zprint ^ztran foo; set $ztexit=1 set $zinterrupt="d ^throwint" tstart () for i=1:1:10 do . set ^ACN(i,"bal")=i*100 tstart () do ^throwint ;do ^proc tcommit:$tlevel=2 for i=1:1:10 do . set ^ACN(i,"int")=i*0.05 ;do ^srv if $tlevel trollback ;do ^exc set $ztexit="",$zinterrupt="" quit bar; write "Begin Transaction",! set $ztexit=1 tstart () i '$zsigproc($j,$ztrnlnm("sigusrval")) write "interrupt sent...",!! for i=1:1:4 set ^B(i)=i*i tcommit write "End Transaction",! ;do ^srv quit GTM>zprint ^throwint throwint set $zinterrupt="write !,""interrupt occurred at : "",$stack($stack-1,""PLACE""),!set $ztexit=1" if '$zsigproc($job,$ztrnlnm("sigusrval")) write "interrupt sent to process" write "***************************************",!! quit GTM>do foo^ztran interrupt sent to process interrupt occurred at : throwint+3^throwint *************************************** interrupt occurred at : foo+13^ztran GTM>
上記のような foo^ ztran 呼び出しでは、割り込みハンドラは、ユーザ定義のルーチン、throwint です。プロセスはシグナル(SIGUSR1)を送信し、$ZINTERRUPTが実行されます。最も外側のTROLLBACKでは、割り込みが再度スローされ、再び実行されるために$ZINTERRUPTを引き起こします。
例:
GTM>w $zinterrupt "IF $ZJOBEXAM()" GTM>zsystem "ls GTM*" ls: No match. GTM>do bar^ztran Begin Transaction interrupt sent... End Transaction GTM>zsystem "ls GTM*" GTM_JOBEXAM.ZSHOW_DMP_3951_1 GTM_JOBEXAM.ZSHOW_DMP_3951_2 GTM>
これは、プロセスに発行された割り込みを提供するために、$ZINTERRUPTのデフォルトの値を使用します。$ZJOBEXAM関数は ZSHOW "*" を実行し、割り込みの初期化のために各GTM_ZJOBEXAM_ZSHOW_DMPに出力を格納し、tcommitの時点で割り込みが再スローされたとき。