et il me sembles que les daemon systèmes survivent bien sans utilisateur connecté.
Ben oui, mais dans systemd, la slice système (ie le/les cgroup(s) attribué au lancement de processus en mode service) n'a pas le même fonctionnement que les slices utilisateurs. Donc si tu lances un processus en tant qu'utilisateur et que pour une raison X ou Y tu veux le conserver bien que tu fermes ta session - tu l'as un peu dans l'os.
En ce qui concerne daemon() c'est un utilitaire "à la sauce" sysV init. En d'autres termes c'est un toolkit qui facilite le double fork et la migration des input/output depuis un pty/tty vers un autre.
a) C'est très compliqué à utiliser en cours de route (ie c'est pas facile de démoniser à la volée un processus qui n'a pas été prévu pour - notamment qui ne va pas migrer sa mémoire, environnement, threads etc. quand il va se prendre un fork dans les dent). daemon() est plutôt destiné à être utilisé au lancement du processus
b) systemd en a rien à faire de daemon(), le process aura été lancé depuis une slice utilisateur, donc il va rester dans son cgroup utilisateur. En d'autres termes, daemon() ou pas, ou moment ou la slice sera nettoyée (par exemple à la fermeture de session) le processus va gicler (c'est d'ailleurs bien là le soucis qui nous préoccupe aujourd'hui)
c) Si on fait avaler à systemd une slice dégénérée (ie une slice utilisateur qui est considérée par systemd comme une slice système - voire une slice mère de la slice système) ca passe. Par contre créer ce type de slice est complexe, non supportée et casse beaucoup de choses (logind par exemple - pour citer le truc le plus impactant). A part en expérimentation pour faire joujou, je déconseille vivement.
[^] # Re: Bug ferme chez tmux
Posté par Kaane . En réponse au journal Attention avec systemd, Tmux ne survit plus après la fermeture de la session.. Évalué à 6.
Ben oui, mais dans systemd, la slice système (ie le/les cgroup(s) attribué au lancement de processus en mode service) n'a pas le même fonctionnement que les slices utilisateurs. Donc si tu lances un processus en tant qu'utilisateur et que pour une raison X ou Y tu veux le conserver bien que tu fermes ta session - tu l'as un peu dans l'os.
En ce qui concerne daemon() c'est un utilitaire "à la sauce" sysV init. En d'autres termes c'est un toolkit qui facilite le double fork et la migration des input/output depuis un pty/tty vers un autre.
a) C'est très compliqué à utiliser en cours de route (ie c'est pas facile de démoniser à la volée un processus qui n'a pas été prévu pour - notamment qui ne va pas migrer sa mémoire, environnement, threads etc. quand il va se prendre un fork dans les dent). daemon() est plutôt destiné à être utilisé au lancement du processus
b) systemd en a rien à faire de daemon(), le process aura été lancé depuis une slice utilisateur, donc il va rester dans son cgroup utilisateur. En d'autres termes, daemon() ou pas, ou moment ou la slice sera nettoyée (par exemple à la fermeture de session) le processus va gicler (c'est d'ailleurs bien là le soucis qui nous préoccupe aujourd'hui)
c) Si on fait avaler à systemd une slice dégénérée (ie une slice utilisateur qui est considérée par systemd comme une slice système - voire une slice mère de la slice système) ca passe. Par contre créer ce type de slice est complexe, non supportée et casse beaucoup de choses (logind par exemple - pour citer le truc le plus impactant). A part en expérimentation pour faire joujou, je déconseille vivement.