Poser cette question après une longue discussion avec un collègue, je voudrais vraiment une clarification ici.
Je lance un processus d'arrière-plan, soit en ajoutant " &
" à la ligne de commande, soit en l'arrêtant CTRL-Z
et en le reprenant en arrière-plan avec " bg
". Ensuite, je me déconnecte.
Ce qui se produit?
Nous étions sûrs qu'il aurait dû être tué par un SIGHUP, mais cela ne s'est pas produit; lors de la reconnexion, le processus était en cours d'exécution et a pstree
montré qu'il était "adopté" par init
.
Est-ce le comportement attendu?
Mais alors, si c'est le cas, quel est le nohup
but de la commande? Il semble que le processus ne sera pas tué de toute façon, avec ou sans lui ...
Modifier 1
Quelques détails supplémentaires:
- La commande a été lancée à partir d'une session SSH, pas à partir de la console physique.
- La commande a été lancée sans
nohup
et / ou&
; il a ensuite été suspendu avecCTRL-Z
et repris en arrière-plan avecbg
. - La session ssh n'a pas chuté. Il y a eu une déconnexion réelle (
exit
commande " "). - Le processus était une
scp
opération de copie de fichiers. - Lorsque vous vous reconnectez,
pstree
le processus est en cours d'exécution et est enfant deinit
.
Modifier 2
Pour énoncer plus clairement la question: mettre un processus en arrière-plan (en utilisant &
ou bg
) le fera-t-il ignorer SIGHUP
, tout comme la nohup
commande?
Modifier 3
J'ai essayé d'envoyer manuellement un SIGHUP
à scp
: il s'est arrêté, donc il n'ignore certainement pas le signal.
Ensuite, j'ai essayé de nouveau de le lancer, de le mettre en arrière-plan et de me déconnecter: il a été "adopté" par init
et a continué à fonctionner, et je l'ai trouvé là lors de la reconnexion.
Je suis assez perplexe maintenant. On dirait que non a SIGHUP
été envoyé du tout jusqu'à la fermeture de session.
1>/dev/null 2>&1
pour bash, etc.?