Les sous-systèmes IBM i, QINTER, QBATCH et les autres
Tous les travaux d'IBM i, sauf ceux du système, tournent dans un sous-système. Voici à quoi servent QINTER, QBATCH, QCTL ou QSPL, comment un sous-système reçoit le travail, lui donne sa mémoire et sa priorité, et comment créer le vôtre.
En une phrase
Un sous-système est un environnement d'exécution : il reçoit
des travaux par ses portes d'entrée (écrans, files d'attente…), leur
donne de la mémoire et une priorité, et les contrôle jusqu'à leur
fin. Ses règles sont rangées dans un objet *SBSD, la description de
sous-système.
À quoi sert un sous-système ?
Un IBM i fait tourner en même temps des sessions d'utilisateurs, des traitements de nuit, des serveurs et des impressions. Les sous-systèmes séparent ces familles de travail, pour que chacune ait ses propres règles :
- sa mémoire : les sessions interactives ne se battent pas pour la même mémoire que les gros traitements ;
- sa priorité : une saisie reste rapide pendant qu'un batch tourne ;
- son débit : on limite le nombre de travaux qui tournent à la fois ;
- son interrupteur : on arrête les sessions des utilisateurs (ENDSBS QINTER) sans arrêter les traitements, par exemple pour un week-end de batch sans connexion.
Chaque sous-système actif est piloté par un travail du même nom, son moniteur
(type SBS dans WRKACTJOB), qui démarre les travaux, les contrôle et les arrête.
Seuls les travaux système (type SYS) vivent hors de tout sous-système.
Les sous-systèmes livrés par IBM
IBM livre deux configurations prêtes à l'emploi. La valeur système QCTLSBSD choisit
celle qui démarre : QBASE, qui réunit dans un même sous-système l'interactif,
le batch et les communications, ou
QCTL, qui répartit le travail en plusieurs sous-systèmes. Sur notre IBM i 7.5,
QCTLSBSD vaut QCTL QSYS. Voici les sous-systèmes de cette configuration,
avec le nombre de travaux que nous y avons comptés sans aucune session ouverte :
| Sous-système | Son rôle | Travaux actifs |
|---|---|---|
QCTL |
Le sous-système de contrôle. Il démarre le premier, porte la console, et son travail autostart démarre les autres. | 1 |
QINTER |
Les sessions interactives des écrans 5250, sauf la console. | 1 |
QBATCH |
Les travaux batch, en particulier ceux soumis dans la file QGPL/QBATCH. | 1 |
QSPL |
Les éditeurs (writers) qui impriment les spools, et les lecteurs. | 1 |
QCMN |
Les travaux de communication, hors TCP/IP. | 8 |
QSYSWRK |
Les fonctions du système démarrées automatiquement avec IBM i. Sur notre système : Telnet (QTVTELNET), NTP (QTOTNTP), le serveur d'historiques (QJOBLOGSVR)… | 66 |
QUSRWRK |
Les travaux que des serveurs démarrent pour le compte d'un utilisateur, comme QZDASOINIT, qui traite les connexions SQL (ODBC, JDBC). | 23 |
QSERVER |
Le serveur de fichiers (travaux QPWFSERV). | 15 |
Le compte inclut le moniteur du sous-système : un QINTER sans session compte 1 travail, son moniteur. Les logiciels ajoutent leurs propres sous-systèmes. Sur notre système, on trouve aussi QHTTPSVR (serveur HTTP) et Q1ABRMNET (BRMS), et DEMOSBS, celui que nous avons créé pour cette rubrique. WRKSBS les liste :

WRKSBS : les sous-systèmes actifs et les pools de mémoire du système qu'ils utilisent. QINTER en utilise deux (2 et 3), QSPL aussi (2 et 4).Qui démarre les sous-systèmes ?
Au démarrage d'IBM i (l'IPL), le système démarre le sous-système de contrôle désigné par
QCTLSBSD. Celui-ci a un travail autostart qui appelle le programme
de démarrage, désigné par la valeur système QSTRUPPGM (par défaut
QSTRUP de QSYS). C'est ce programme qui démarre les autres sous-systèmes et les
imprimantes. Nous l'avons vérifié dans le source d'origine de QSTRUP : il démarre QSERVER,
QUSRWRK, QINTER, QBATCH, QCMN et QSPL, mais pas QSYSWRK, qui est actif dès la fin du démarrage
du système.
Le programme de démarrage se remplace : on en écrit une copie qui démarre aussi ses propres
sous-systèmes ou serveurs, puis on change QSTRUPPGM, une valeur système que seul un
responsable sécurité peut modifier et qui ne compte qu'au démarrage suivant. Sur notre système,
c'est une copie rangée dans QGPL.
La description de sous-système (*SBSD)
Un sous-système est entièrement décrit par un objet *SBSD : d'où vient son travail,
combien de travaux il accepte, quelle mémoire il utilise, et comment chaque travail est
aiguillé. DSPSBSD en montre toutes les parties :

DSPSBSD QINTER : chaque option affiche une partie de la description.| Partie | Ce qu'elle dit | Commande |
|---|---|---|
| Attributs | Le nombre maximal de travaux actifs à la fois, l'écran d'ouverture de session. | CHGSBSD |
| Pools | La mémoire que le sous-système utilise, numérotée de 1 à 10 dans le sous-système. | CHGSBSD |
| Postes écrans | Les écrans dont il accepte les sessions, par nom ou par type. | ADDWSE |
| Postes files d'attente | Les files d'attente de travaux qu'il lit, et combien de travaux de chacune il exécute à la fois. | ADDJOBQE |
| Postes autostart | Les travaux à lancer à chaque démarrage du sous-système. | ADDAJE |
| Postes prédémarrés | Les travaux à démarrer à l'avance pour répondre vite, ceux des serveurs. | ADDPJE |
| Postes de routage | Pour chaque valeur de routage : le programme, la classe et le pool. | ADDRTGE |
Un sous-système sans poste pour un type de travail ne peut pas l'exécuter : un sous-système sans
poste écran n'accepte aucune session, un sous-système sans poste file d'attente n'exécute aucun
batch. QINTER, par exemple, accepte les écrans de tout type grâce à son poste
*ALL :

*CONS concerne la console, qu'IBM laisse dans le sous-système de contrôle.Le routage : comment un travail reçoit sa priorité
Quand un travail entre dans un sous-système, celui-ci compare ses données de routage, une courte chaîne de caractères, aux valeurs de comparaison de ses postes de routage, dans l'ordre des numéros de séquence. Le premier poste qui correspond donne au travail son programme, sa classe et son pool de mémoire. Si aucun ne correspond, le travail s'arrête.
Nous avons suivi les deux chemins sur notre IBM i 7.5 :
La session : QCMDI, poste 10 de QINTER
Le profil qui ouvre la session utilise la description de travail QGPL/QDFTJOBD, dont
les données de routage valent QCMDI. Le premier poste de routage de QINTER attend
justement 'QCMDI' :


QCMD, classe QGPL/QINTER, pool 2 du sous-système.Le pool 2 de QINTER est *INTERACT, la mémoire réservée à l'interactif, et la classe
QINTER donne une priorité d'exécution de 20 avec une tranche de temps de 2 secondes :

*BASE, 2 = *INTERACT.
DSPCLS QGPL/QINTER : priorité 20, tranche de 2 000 ms.Le batch : QCMDB, et le poste *ANY de QBATCH
Un travail soumis par SBMJOB reçoit par défaut les données de routage QCMDB
(paramètre RTGDTA). Or QBATCH n'a aucun poste dont la valeur soit
'QCMDB' : c'est son dernier poste, 9999 *ANY, qui accepte tout, qui
prend le travail.

QCMDB.
QCMD, classe QSYS/QBATCH, pool 1.
DSPCLS QSYS/QBATCH : priorité 50, tranche de 5 000 ms. Plus le nombre est grand, moins le travail est prioritaire.CMPVAL(*ANY) de numéro élevé, comme le 9999 de QBATCH.
La mémoire : les pools
La mémoire centrale est découpée en pools. Deux sont spéciaux :
*MACHINE, réservé au système (aucun travail utilisateur n'y tourne), et
*BASE, qui reçoit toute la mémoire non attribuée et sert au batch. Les pools
partagés *INTERACT (l'interactif), *SPOOL (les éditeurs) et
*SHRPOOL1 à *SHRPOOL60 sont à la disposition des sous-systèmes.
Attention aux deux numérotations. Dans un sous-système, les pools sont numérotés de 1 à 10 :
pour QINTER, 1 = *BASE et 2 = *INTERACT. Le système, lui, numérote
tous les pools en service : *MACHINE est le 1, *BASE le 2, les autres
suivent dans l'ordre où ils sont alloués. C'est pourquoi WRKSBS affiche « 2 3 » pour QINTER : le
pool 3 du système est son *INTERACT.
Ne confondez pas non plus le nombre maximal de travaux d'un sous-système et le niveau d'activité d'un pool, le nombre d'unités d'exécution qui peuvent y tourner en même temps. Un travail peut être actif dans le sous-système et attendre son tour dans le pool.
Créer son propre sous-système
Pour notre démonstration, nous avons créé le sous-système DEMOSBS dans la bibliothèque JOBITRV. Il faut trois choses : la description, une source de travail (ici une file d'attente, qui n'exécute qu'un travail à la fois) et un poste de routage :
CRTSBSD SBSD(JOBITRV/DEMOSBS) POOLS((1 *BASE)) +
TEXT('Sous-système de démonstration')
ADDJOBQE SBSD(JOBITRV/DEMOSBS) JOBQ(JOBITRV/DEMOJOBQ) MAXACT(1) +
SEQNBR(10)
ADDRTGE SBSD(JOBITRV/DEMOSBS) SEQNBR(9999) CMPVAL(*ANY) +
PGM(QSYS/QCMD) CLS(QGPL/QBATCH)
STRSBS SBSD(JOBITRV/DEMOSBS)
La classe QGPL/QBATCH est nommée explicitement : par défaut, ADDRTGE cherche une
classe du même nom que le sous-système (CLS(*SBSD)), qui n'existe pas ici. Une fois
démarré, DEMOSBS apparaît dans WRKSBS et WRKACTJOB, et sa file d'attente est bien rattachée :

Pour l'arrêter : ENDSBS SBS(DEMOSBS) OPTION(*CNTRLD) DELAY(60) laisse une minute aux
travaux pour finir, OPTION(*IMMED) les arrête tout de suite. La suite, avec la file
d'attente et la description de travail, est sur la page
JOBQ et JOBD.
Toutes les commandes de la démonstration
/* La bibliothèque de démonstration */
CRTLIB LIB(JOBITRV) TEXT('Démonstration gestion des travaux')
/* Une file d'attente de travaux et une file d'attente de sortie */
CRTJOBQ JOBQ(JOBITRV/DEMOJOBQ) +
TEXT('File d''attente des travaux de démonstration')
CRTOUTQ OUTQ(JOBITRV/DEMOOUTQ) +
TEXT('File d''attente de sortie de démonstration')
/* La description de travail qui relie les deux */
CRTJOBD JOBD(JOBITRV/DEMOJOBD) JOBQ(JOBITRV/DEMOJOBQ) JOBPTY(5) +
OUTPTY(5) OUTQ(JOBITRV/DEMOOUTQ) +
INLLIBL(JOBITRV QGPL QTEMP) LOG(4 00 *SECLVL) +
TEXT('Description de travail de démonstration')
/* Le sous-système : un pool, une file, un poste de routage */
CRTSBSD SBSD(JOBITRV/DEMOSBS) POOLS((1 *BASE)) +
TEXT('Sous-système de démonstration')
ADDJOBQE SBSD(JOBITRV/DEMOSBS) JOBQ(JOBITRV/DEMOJOBQ) MAXACT(1) +
SEQNBR(10)
ADDRTGE SBSD(JOBITRV/DEMOSBS) SEQNBR(9999) CMPVAL(*ANY) +
PGM(QSYS/QCMD) CLS(QGPL/QBATCH)
STRSBS SBSD(JOBITRV/DEMOSBS)
/* Cinq travaux soumis depuis une session 5250 */
SBMJOB CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) JOB(EDITION) +
JOBD(JOBITRV/DEMOJOBD) OUTQ(*JOBD)
SBMJOB CMD(DLYJOB DLY(3600)) JOB(CALCUL1) JOBD(JOBITRV/DEMOJOBD)
SBMJOB CMD(DLYJOB DLY(3600)) JOB(CALCUL2) JOBD(JOBITRV/DEMOJOBD)
SBMJOB CMD(DLYJOB DLY(3600)) JOB(CALCUL3) JOBD(JOBITRV/DEMOJOBD)
SBMJOB CMD(DLYJOB DLY(3600)) JOB(CALCUL4) JOBD(JOBITRV/DEMOJOBD) +
HOLD(*YES)
Les commandes des sous-systèmes
| WRKSBS | Les sous-systèmes actifs, leurs pools, et l'accès à leurs travaux. |
|---|---|
| DSPSBSD | Afficher une description de sous-système : pools, postes, routage. |
| STRSBS | Démarrer un sous-système. |
| ENDSBS | Arrêter un sous-système, en douceur (*CNTRLD) ou tout de suite (*IMMED). |
| CRTSBSD | Créer une description de sous-système. |
| CHGSBSD | Modifier ses attributs : pools, nombre maximal de travaux. |
| ADDJOBQE | Rattacher une file d'attente de travaux. |
| ADDWSE | Ajouter un poste écran. |
| ADDAJE | Ajouter un travail autostart. |
| ADDPJE | Ajouter un poste de travaux prédémarrés. |
| ADDRTGE | Ajouter un poste de routage. |
| CRTCLS | Créer une classe (priorité, tranche de temps). |
| DSPCLS | Afficher une classe. |
| WRKSHRPOOL | Les pools de mémoire partagés et leur taille. |
Et en SQL :
| QSYS2.SUBSYSTEM_INFO | Les sous-systèmes, actifs ou non, et leurs travaux. |
|---|---|
| QSYS2.SUBSYSTEM_POOL_INFO | Les pools de mémoire de chaque sous-système. |
| QSYS2.ACTIVE_JOB_INFO | Les travaux actifs, filtrables par sous-système. |
À retenir
- QINTER pour les sessions, QBATCH pour le batch, QSPL pour l'impression, QCTL pour piloter.
- Une description de sous-système dit d'où vient le travail, combien et avec quelle mémoire.
- Le routage relie les données de routage du travail à un programme, une classe et un pool.
- La priorité vient de la classe : 20 pour QINTER, 50 pour QBATCH.
Sources
Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 14 octobre 2026 :
- IBM i 7.3 Systems management : Work management, IBM (PDF, 212 pages). La vie d'un travail batch (SBMJOB, JOBQ, sous-système, pool mémoire, OUTQ) ; nom qualifié d'un travail à 6 chiffres ; types de travaux ; démarrage d'un travail interactif et d'un travail batch ; routage, classe et priorité d'exécution (0 à 99) ; pools *MACHINE, *BASE, *INTERACT, *SPOOL ; ordre d'une JOBQ (priorité 0 à 9, MAXACT, une file par sous-système) ; QSTRUPPGM ; OUTQ, spools, éditeurs et repli sur QGPL/QPRINT ; planning des travaux (objet QDFTJOBSCD, QJOBSCD, exemples d'ADDJOBSCDE, SBMJOB à heure fixe, reprise après arrêt).
- Subsystems shipped with the system, IBM, documentation IBM i 7.5. Les configurations QBASE et QCTL, la valeur système QCTLSBSD, le rôle de QINTER, QBATCH, QCMN, QSPL, QSYSWRK, QUSRWRK et QSERVER.
- ACTIVE_JOB_INFO table function, IBM, documentation IBM i 7.5. Les codes de type de travail (ASJ, BCH, BCI, INT, PJ, SBS, SYS, WTR…) et d'état (RUN, DSPW, MSGW, DEQW, DLYW, LCKW…).
- L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Valeurs par défaut de SBMJOB, CRTJOBD, CRTPF (WAITRCD), CPYSPLF et DLTSPLF.
Questions fréquentes
Qu'est-ce qu'un sous-système IBM i ?
Un sous-système est un environnement d'exécution dans lequel le système gère les ressources des travaux. Il est décrit par un objet *SBSD qui dit d'où vient le travail (écrans, files d'attente, travaux autostart ou prédémarrés), quelle mémoire il utilise et comment chaque travail est routé. Tous les travaux, sauf les travaux système, tournent dans un sous-système.
À quoi servent QINTER, QBATCH, QCTL et QSPL ?
QINTER reçoit les sessions interactives, sauf la console. QBATCH exécute les travaux batch. QCTL est le sous-système de contrôle : son travail autostart démarre les autres. QSPL héberge les éditeurs qui impriment les spools.
Comment démarrer ou arrêter un sous-système ?
STRSBS démarre un sous-système, ENDSBS l'arrête : OPTION(*CNTRLD) laisse aux travaux un délai pour finir, OPTION(*IMMED) les arrête tout de suite. WRKSBS liste les sous-systèmes actifs. Arrêter QINTER coupe les sessions des utilisateurs, sauf celle de la console.
Pourquoi créer son propre sous-système ?
Pour isoler une application : lui donner sa propre mémoire, limiter le nombre de travaux qui tournent à la fois, ou pouvoir l'arrêter sans toucher au reste. Il faut une description de sous-système (CRTSBSD), une source de travail (une JOBQ avec ADDJOBQE) et un poste de routage (ADDRTGE).