Si je lancer un processus d'arrière-plan, puis me déconnecter, continuera-t-il à fonctionner?

En posant cette question après une discussion prolongée avec un collègue, j'aimerais vraiment avoir une précision ici.

Je lance un processus d'arrière-plan, en ajoutant " & " à la ligne de commande ou en l'arrêtant avec CTRL-Z et en le reprenant en arrière-plan avec " bg ". Ensuite, je me déconnecte.

Ce qui se produit?

Nous étions tout à fait sûrs qu'il aurait dû être tué par un SIGHUP, mais cela ne s'est pas produit; Lors de la connexion à nouveau, le processus a été heureusement en cours d'exécution et pstree montré qu'il était "adopté" par init .

Est-ce le comportement attendu?

Mais, si c'est le cas, quel est le but de la commande nohup ? Il semble que le processus ne sera pas tué de toute façon, avec ou sans …


Modifier 1

Quelques détails supplémentaires:

  • La commande a été lancée à partir d'une session SSH, et non de la console physique.
  • La commande a été lancée sans nohup et / ou & ; Il a ensuite été suspendu avec CTRL-Z et a repris en arrière-plan avec bg .
  • La session ssh n'a pas baissé. Il y a eu une connexion réelle (commande " exit ").
  • Le processus était une opération de copie de fichier scp .
  • Lors de l'ouverture de session, pstree montré le processus en cours d'exécution et l'enfant de l' init .

Modifier 2

Pour indiquer la question plus clairement: mettra un processus en arrière-plan (en utilisant & ou bg ), ignorez-vous SIGHUP , tout comme la commande nohup ?


Modifier 3

J'ai essayé d'envoyer manuellement un SIGHUP à scp : il est sorti, donc il ignore définitivement le signal.

Ensuite, j'ai essayé de nouveau le lancer, en le mettant en arrière plan et en déconnectant: il a été "adopté" par init et a continué à fonctionner, et je l'ai trouvé là lors de la connexion.

Je suis complètement perplexe maintenant. On dirait qu'aucun SIGHUP n'a été envoyé lors de la déconnexion.

6 Solutions collect form web for “Si je lancer un processus d'arrière-plan, puis me déconnecter, continuera-t-il à fonctionner?”

Réponse trouvée.

Pour BASH, cela dépend de l'option shell huponexit , qui peut être visualisée ou configurée à l'aide de la commande shopt .

On dirait que ces options sont désactivées par défaut, au moins sur les systèmes basés sur RedHat.

Plus d'informations sur la page man BASH :

La coquille sort par défaut lors de la réception d'un SIGHUP. Avant de sortir, un shell interactif renvoie le SIGHUP à tous les travaux, en cours d'exécution ou à l'arrêt. Les emplois arrêtés sont envoyés à SIGCONT pour s'assurer qu'ils reçoivent le SIGHUP. Pour empêcher le shell d'envoyer le signal à un travail particulier, il doit être supprimé de la table des travaux avec le désactivé (voir COMMANDES SHELL BUILTIN ci-dessous) ou marqué pour ne pas recevoir SIGHUP en utilisant disown -h.

Si l'option shell huponexit a été définie avec shopt, bash envoie un SIGHUP à tous les travaux lorsqu'un shell de connexion interactif sort.

Je suis d'accord avec Warner et je voudrais simplement ajouter que vous pouvez empêcher le shell d'envoyer SIGHUP avec la commande "renver". La page man bash contient une bonne description.

Vous pouvez utiliser la commande nohup pour lancer la commande et rediriger la sortie vers un fichier de sortie nohup. De la page man de nohup:

 nohup - run a command immune to hangups, with output to a non-tty 

L'autre option consiste à utiliser la commande d' écran . Le bénéfice de l'utilisation de l'écran est que vous pouvez vous reconnecter ultérieurement.

Lorsque vous décochez un processus en arrière-plan, il sera toujours le processus enfant du shell qui l'exécute.

Tous les processus enfants exécutés sous un shell sont envoyés un SIGHUP à la sortie. La performance varie légèrement en fonction de la situation exacte, qui est détaillée en détail dans la page de manuel de bash. D'autres coquilles ont probablement des descriptions similaires.

Apache, et d'autres démons, rechargent généralement la configuration sur SIGHUP. Les utilitaires d'espace de l'utilisateur meurent souvent. La performance de l'application liée aux signaux peut être unique à l'application.

Quel était le processus? La performance décrite dans la publication précédente 1 était exacte.

Certaines fonctions et processus de script peuvent intercepter des signaux. Tandis que les boucles peuvent s'enfuir comme un fou.

Voir:

La session SSH diminue – La commande continue-t-elle à s'exécuter?

Modifier 1 à 16h22

De la page de manuel bash:

 The shell exits by default upon receipt of a SIGHUP. Before exiting, an interactive shell resends the SIGHUP to all jobs, running or topped. 

La recherche initiale 1 montre que OpenSSH ignore vraisemblablement SIGHUP, peut-être plus de signaux.

Si vous n'avez pas lancé la commande via un outil comme l' screen , alors, lorsque la session se termine, faites donc tous les travaux / tâches associés à cette session.

  • Comment puis-je identifier quel process produit des icons "invisibles" dans la barre d'état du système
  • Comment get le nom du file de process à partir de PID dans MacOS?
  • Linux - Comment puis-je voir quand une procédure a démarré?
  • Windows 2003-R2-Server: Process "System" prend de gros morceaux de time CPU
  • Besoin d'informations sur l'exécutable zybbb9.exe
  • Erreur FTP / IIS: le processus ne peut pas accéder au fichier car il est utilisé par un autre processus
  • Comment puis-je localiser une procédure sur Debian Linux qui crée une grande quantité de trafic réseau?
  • Existe-t-il un moyen de redémarrer automatiquement MySQL, si cela prend trop de puissance de traitement?
  • En quoi consiste le tableau de bord en ligne en cmdline?
  • Comment find un process parent pour process enfant si le process parent est terminé
  • Processus multiples * presque identiques sur un serveur Linux
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.