Cette question est venu tout à fait un beaucoup ( vraiment beaucoup ), mais je trouve que les réponses sont généralement incomplètes. La question générale est "Pourquoi mon travail est-il / n'est-il pas tué lorsque je quitte / tue ssh?", Et voici ce que j'ai trouvé. La première question est: dans quelle mesure les informations suivantes sont-elles générales? Ce qui suit semble être vrai pour le linux Debian moderne, mais il me manque quelques bits; et que doivent savoir les autres?
Tous les processus enfants, en arrière-plan ou non d'un shell ouvert sur une connexion ssh sont supprimés avec SIGHUP lorsque la connexion ssh est fermée uniquement si l'
huponexit
option est définie: exécutezshopt huponexit
pour voir si cela est vrai.Si
huponexit
c'est vrai, vous pouvez utilisernohup
oudisown
pour dissocier le processus du shell afin qu'il ne soit pas tué lorsque vous quittez. Ou exécutez des choses avecscreen
.Si
huponexit
false, qui est la valeur par défaut sur au moins certains linux ces jours-ci, les travaux en arrière-plan ne seront pas supprimés lors de la déconnexion normale.Mais même si la valeur
huponexit
est fausse, alors si la connexion ssh est interrompue ou tombe (différente de la déconnexion normale), les processus en arrière-plan seront toujours supprimés. Cela peut être évité pardisown
ounohup
comme dans (2).Il existe une certaine distinction entre (a) les processus dont le processus parent est le terminal et (b) les processus qui ont stdin, stdout ou stderr connectés au terminal . Je ne sais pas ce qui arrive aux processus qui sont (a) et non (b), ou vice versa.
Dernière question: comment éviter les comportements (3)? En d'autres termes, par défaut, dans les processus en arrière-plan Debian, ils se déroulent joyeusement par eux-mêmes après la déconnexion, mais pas après la fin de la connexion ssh. J'aimerais que la même chose se produise pour les processus, que la connexion soit fermée normalement ou interrompue. Ou est-ce une mauvaise idée?
Edit: Un autre moyen important de garder les emplois tués, qui fonctionne (?) Dans les deux cas est de les exécuter à travers l' écran . Mais, la question est plutôt de comprendre quand les choses sont tuées et quand elles ne le sont pas: parfois, les gens veulent que les emplois soient supprimés à la déconnexion, par exemple.
Plus de discussions: - Clarification sur les signaux (soupir), les travaux et le terminal de contrôle - /server/117152/do-background-processes-get-a-sighup-when-logging-off - Continuer SSH tâche / travaux en arrière-plan lors de la fermeture de SSH - Un travail mis en arrière-plan continuera-t-il à s'exécuter après la fermeture d'une session SSH? - Empêcher un processus d'arrière-plan déjà en cours d'exécution d'être arrêté après la fermeture du client SSH - Comment puis-je démarrer un processus via SSH de telle sorte qu'il continue à s'exécuter après ma déconnexion? - Impossible de maintenir le travail à distance en cours d'exécution sur OS X - Fermer la connexion SSH