Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Sous-programmes et appels

SHTDN

Savoir si l'arrêt du système est demandé

Allume l'indicateur de la colonne 54-55 quand l'opérateur a demandé l'arrêt du système ; il reste éteint en traitement par lots.

Syntaxe

     C                     SHTDN                     90
Facteur 1, facteur 2 et zone résultat
Vides.
Indicateurs (54-55)
Obligatoire (sans lui : QRG5127, « Aucun indicateur résultant n'est défini pour l'opération. La spécification n'est pas prise en compte. »). Il s'allume quand l'arrêt du système a été demandé, et reste éteint sinon.
Effet
L'indicateur de la colonne 54-55 est mis à jour à chaque SHTDN : allumé si l'arrêt est demandé, éteint sinon. Rien d'autre n'est modifié : le programme décide lui-même quoi faire (terminer sa boucle, fermer proprement).

À quoi ça sert

Un programme de service qui tourne longtemps (serveur de files de données, boucle d'attente) doit pouvoir s'arrêter proprement quand le système va s'éteindre. Il teste SHTDN à chaque tour et sort de sa boucle si l'indicateur s'allume.

Exemple 1 : Boucle surveillée

     H*  SHTDN : indicateur 90 = arret demande, toujours eteint en batch
     C                     Z-ADD0         TOUR    30
     C                     DO   3
     C                     ADD  1         TOUR
     C                     SHTDN                     90
     C   90                LEAVE
     C           TOUR      DSPLY
     C                     END
     C           *IN90     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

  1
  2
  3
0

Trois tours : à chaque tour SHTDN interroge le système, et l'indicateur 90 est éteint (le LEAVE n'est jamais pris). Les trois tours sont affichés et l'indicateur reste à 0 après la boucle : un travail en traitement par lots ne reçoit pas de demande d'arrêt.

Le piège

L'indicateur est obligatoire. Un SHTDN sans indicateur en 54-55 est refusé : QRG5127 (gravité 30), « Aucun indicateur résultant n'est défini pour l'opération. La spécification n'est pas prise en compte. »

Ne comptez pas dessus pour vos tests. En traitement par lots, l'indicateur reste éteint, comme le montre l'exemple : le chemin « arrêt demandé » ne s'exécute jamais en recette.

En RPG ILE full free

En RPG IV, la fonction intégrée %shtdn renvoie *on quand l'arrêt est demandé : elle remplace l'opération et son indicateur.

if %shtdn;
  leave;
endif;