1 votes

Processus en arrière-plan et SIGHUP

Ma compréhension est qu'un programme associé à un terminal BASH recevra le signal SIGHUP si ce terminal est fermé. Cela terminera généralement le programme.

Je sais aussi que vous pouvez utiliser la commande nohup avec le symbole & pour exécuter le programme en arrière-plan et le dissocier du terminal afin que le programme ne soit pas arrêté lorsque le terminal se ferme (à la déconnexion).

Cependant, supposez qu'un programme est exécuté normalement sans nohup, puis est suspendu en utilisant Cntl-Z. Si le programme est ensuite repris en arrière-plan en utilisant la commande bg, recevra-t-il le signal SIGHUP à la déconnexion?

Ou pour le dire autrement: si j'ai un programme qui est déjà en cours d'exécution et que je ne veux pas l'arrêter mais que je voudrais me déconnecter, puis-je le mettre en pause en utilisant Cntl-Z et le faire tourner en arrière-plan en utilisant bg? Ou le programme sera-t-il arrêté lorsque je me déconnecte?

2voto

Damian Powell Points 315

Vous pouvez utiliser la commande disown si vous utilisez Bash.

De man bash:

Si l'option -h est donnée, chaque jobspec n'est pas supprimée de la table, mais est marquée pour que SIGHUP ne soit pas envoyée au job si le shell reçoit un SIGHUP.

1voto

Lark Points 1640

Comme le dit Dennis, en bash, vous pouvez utiliser disown pour que le travail ne reçoive pas de SIGHUP lorsque vous fermez bash. BTW : vous pouvez également obtenir le comportement « ne pas envoyer de SIGHUP » si vous l'exécutez avec setsid et pas seulement avec nohup. Setsid a l'avantage de ne pas interférer avec stdout et stderr comme le fait nohup.

Un petit nettoyage mineur de votre question cependant :

Je crois qu'un programme associé à un terminal BASH

Pas seulement bash, mais ksh et zsh ferment également les processus enfants avec SIGHUP lorsque les shells sont fermés. C'est assez standard à travers les shells. Je suis trop paresseux pour faire des recherches approfondies et dire que "tous" le font, mais je suis assez sûr pour dire qu'ils le font tous.

Terminal BASH

Non pas le terminal bash, mais un shell bash. Le terminal, enfin l'émulateur de terminal, est la fenêtre. Le shell bash s'exécute à l'intérieur.

recevra le signal SIGHUP si ce terminal est fermé. Cela terminera généralement le programme.

Oui, par défaut, vous serez terminé si vous recevez SIGHUP. N'importe quelle application peut choisir d'ignorer cela (alors rien ne se passe) ou peut attraper le signal et faire quelque chose - le journaliser, nettoyer, etc. Les processus démon comme les serveurs web attrapent généralement cela et l'utilisent comme un indicateur pour relire les fichiers de configuration.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X