J'ai lu une réponse d'un utilisateur qui prétendait que courir
foo 2>&1 >& output.log &
entraînerait la foo
poursuite de l'exécution même lorsqu'ils se déconnectent. Selon cet utilisateur, cela a même fonctionné sur des connexions SSH.
Je ne croyais pas vraiment que, car j'avais l'impression qu'en cas de déconnexion de SSH ou de résiliation du TTY, le shell et donc ses processus recevraient un SIGHUP, ce qui les obligerait à se terminer. À mon avis, c'était la seule raison d'utiliser nohup
dans de tels cas, ou tmux
, screen
et al.
J'ai ensuite regardé dans le manuel de glibc :
Ce signal est également utilisé pour signaler la fin du processus de contrôle sur un terminal aux travaux associés à cette session; cette terminaison déconnecte efficacement tous les processus de la session du terminal de contrôle.
Cela semble confirmer mes pensées. Mais en regardant plus loin, il dit :
Si le processus est un leader de session qui a un terminal de contrôle, un signal SIGHUP est envoyé à chaque processus dans la tâche de premier plan, et le terminal de contrôle est dissocié de cette session.
Cela signifie-t-il donc que les emplois mis en arrière-plan ne recevront pas SIGHUP?
À ma plus grande confusion, j'ai exécuté une session Zsh interactive, exécuté yes >& /dev/null &
et tapé exit
, lorsque Zsh m'a averti que j'avais des travaux en cours et, après avoir tapé exit
une deuxième fois, m'a dit qu'il avait SIGHUPed un travail. Faire exactement la même chose dans Bash laisse le travail en cours…
logout
etyes
fonctionne toujours.