systemd fonctionne en interne en termes de file d'attente de "jobs". Chaque tâche (en simplifiant un peu) est une action à entreprendre: arrêter, vérifier, démarrer ou redémarrer une unité particulière .
Lorsque (par exemple) vous demandez à systemd de démarrer une unité de service , il établit une liste de travaux d'arrêt et de démarrage pour toutes les unités (unités de service, unités de montage, unités de périphérique, etc.) nécessaires pour atteindre cet objectif, selon les exigences et les dépendances de l'unité, les ordonne, selon les relations de commande d'unité, élabore et (si possible) corrige les auto-contradictions et (si cette dernière étape réussit) les place dans la file d'attente.
Il essaie ensuite d'exécuter les "travaux" mis en file d'attente.
Un travail d'arrêt est en cours d'exécution pour la session 1 de l'utilisateur xy
Le nom d'affichage de l' unité est ici Session 1 of user xy
. Ce sera (à partir du nom d'affichage) une unité de session , pas une unité de service . Il s'agit de l'abstraction de session de connexion à l'espace utilisateur qui est maintenue par le logind
programme de systemd et ses plugins PAM. Il s'agit (en substance et en théorie) d'un regroupement de tous les processus que cet utilisateur exécute en tant que «session de connexion» quelque part.
Le travail qui a été mis en file d'attente est stop
. Et cela prend probablement beaucoup de temps car les gens de systemd ont confondu par erreur le blocage de la session avec l' arrêt de la session . Ils cassent les premiers pour faire travailler les seconds, et en réponse, certaines personnes modifient le système pour casser les seconds afin de faire travailler les premiers. Les gens du système devraient vraiment reconnaître que ce sont deux choses différentes.
Dans votre session de connexion, vous avez quelque chose qui ignore SIGTERM
ou qui met beaucoup de temps à se terminer une fois qu'il a vu SIGTERM
. Ironiquement, le premier est le comportement de longue date de certains obus de contrôle du travail. La bonne façon de terminer les chefs de session de connexion lorsqu'ils sont ces shells de contrôle de travail particuliers est de leur dire que la session a été suspendue , après quoi ils terminent tous leurs travaux (un type de travail différent du travail systemd interne), puis se résilier.
Ce qui se passe réellement, c'est que systemd attend le délai d'arrêt de l'unité jusqu'à ce qu'il y ait recours SIGKILL
. Cette temporisation est configurable par unité, bien sûr, et peut être définie pour ne jamais expirer. D'où la raison pour laquelle on peut potentiellement voir différents comportements.
Lectures complémentaires