- Nohup
-
nohup
Nohup est une commande Unix permettant de lancer un processus qui restera actif même après la déconnexion de l'utilisateur l'ayant initiée. Combiné à l'esperluette qui permet le lancement en arrière-plan, nohup permet donc de créer des processus s'exécutant de manière transparente sans être dépendants de l'utilisateur.
Fonctionnement
Au moment de la déconnexion d'un utilisateur, le daemon qui détecte cette déconnexion (telnetd, sshd, ...) envoie un signal SIGHUP (signal 1) aux processus enfants, et l'action associée par défaut à ce signal est la fin du processus. nohup va ignorer le signal SIGHUP (d'où son nom) puis exécuter le programme indiqué en ligne de commande, de sorte que celui-ci sera immunisé contre le signal SIGHUP.
On fera toutefois remarquer que le processus lancé est libre de définir lui-même l'action qu'il désire exécuter associer au traitement du signal SIGHUP. En effet, cette immunité est hérité du processus initial nohup vers ses fils (via fork/exec). Si un programme tiers, pour des raisons de design ou de spécification du programme, choisit de ne pas ignorer ce signal, voire de placer son propre gestionnaire à cette fin, alors ce programme tiers ne sera pas protégé contre les fermetures de terminaux, ou en général contre la réception du signal SIGHUP.
Enfin, l'utilisation de nohup oublie souvent des aspect liés aux descripteurs. En effet, la commande
nohup
s'occupe de rediriger les sortie et erreur standards, mais par contre elle ne fait rien à propos de l'input standard. Dans la majorité des premiers usages, lors de la déconnexion du terminal, l'on reçoit un message comme "There are running jobs.
", lequel est provoqué par le fait que le processus tiers est toujours lié au terminal par son input standard. Cet inconvénient peut être levé en redirigeant explicitement l'input standard du processus tiers.Exemple
La première ligne de commande ci-dessous démarre le programme
mon_programme
en tâche de fond de telle façon qu'une déconnexion ne l'arrêtera pas.$ nohup mon_programme & $ exit
Cet autre exemple montre comment rediriger la sortie vers un fichier texte autre que nohup.out (défaut).
$ nohup mon_programme > out.file &
Voici un exemple avec redirection de l'input standard pour éviter qu'il ne se bloque à la fermeture du terminal.
$ nohup mon_programme 0</dev/null &
Voir aussi
Catégorie : Unix
Wikimedia Foundation. 2010.