Quelle est la fonction de la commande nohup?

18

Je suis un débutant dans Ubuntu. J'ai appris une commande

nohup [command]- courir à l' <command>abri du signal de raccrochage

Je ne peux pas comprendre la signification de « immunisé contre le signal de raccrochage ». De quel type de signal parle-t-il? Et dites-moi comment utiliser cette commande avec un exemple.

coding_ninza
la source
S'il est disponible dans votre shell, disownc'est une meilleure alternative à nohup. Mettez une commande en arrière-plan avec command &ou Ctrl-Z, puis utilisez-la disownpour la détacher du shell.
John Kugelman soutient Monica le
@JohnKugelman cela ne suffit pas , vous avez également détourné les flux d'entrée, de sortie et d'erreur. Alors pourquoi ne pas utiliser «nohup» qui le fait automatiquement pour vous?
miracle173

Réponses:

34

Considérons que vous avez ouvert un geditéditeur de texte à partir d'un terminal et que vous y travaillez. Si vous fermez le terminal avant la fermeture gedit, le gedit se ferme également dès la fermeture du terminal. Que se passe-t-il? Le gedits'exécute en tant que processus enfant sous le terminal. Lorsque vous fermez le terminal, un signal de raccrochage ( SIGHUP) est envoyé au processus qui tue le processus enfant.

D'un autre côté, si vous voulez que votre processus enfant (ici gedit) continue de fonctionner même après la fermeture du terminal parent, vous voudriez que votre processus soit immunisé contre le signal de raccrochage. De sorte que la fermeture du terminal ne ferme pas le processus enfant. nohupfait exactement ce travail.

nohupne déconnecte pas une commande du terminal , il fait ignorer SIGHUP à votre script et redirige stdout / stderr vers un fichier nohup.out, afin que la commande puisse continuer à s'exécuter en arrière-plan après votre déconnexion. Si vous fermez le shell / terminal ou fermez la session, votre commande n'est plus un enfant de ce shell. Il appartient au processus init. Si vous recherchez dans, pstreevous verrez qu'il appartient maintenant au processus 1 (init). Cela ne peut pas être ramené au premier plan car le premier plan n'existe plus.

souravc
la source
16

Outre ce que @sourvac a écrit, il s'agit d'un héritage de Back In The Day lorsque les gens se connectaient via des terminaux muets uniquement textuels, souvent via le modem (original, 110 bauds): le "raccrocher" est littéralement "raccrocher le téléphone" ".

Un pid insensible au signal de raccrochage continuera de fonctionner même après la déconnexion et le raccrochage du téléphone . Cela était très utile sur les ordinateurs lents lorsque les travaux se déroulaient pendant des heures et des heures et que vous ne pouviez pas rester connecté (quelqu'un d'autre devait utiliser le terminal, vous deviez utiliser le téléphone, l'électricité statique dans la ligne pouvait "bzzt" la connexion , etc).

RonJohn
la source
1
Pas seulement dans la journée. J'exécute la plupart de mes gros travaux sur un cluster de serveurs dans lequel je ssh. Si je n'utilisais pas nohup, je devrais laisser mon ordinateur portable connecté à ces machines pendant des jours en attendant la fin des travaux.
Ray
@Ray, qu'en est-il de les exécuter via "at" ou comme tâches cron?
RonJohn
@RonJohn Sure. Ou via un moteur de grille. Je ne voulais pas suggérer que nohup était la seule option, juste qu'il est toujours utilisé à cette fin aujourd'hui.
Ray
1
Peut-être que vos remarques historiques sont correctes. Mais vos conclusions sur son importance actuelle sont fausses. Il n'est pas utile sur les ordinateurs lents, mais il est utile pour les travaux de longue durée. Ce sont deux choses différentes. Vous utilisez «nohup» pour protéger votre travail contre la déconnexion prévue ou involontaire de votre terminal. Même de nos jours, vous n'êtes pas satisfait si un travail échoue, car une erreur réseau déconnecte votre terminal et votre travail est abandonné.
miracle173
Les emplois @Ray Cron sont totalement inappropriés pour y parvenir. Les Cronjobs sont pour des tâches périodiques, vous devez définir l'environnement dans le Cronjob et considérer beaucoup d'autres choses. Peut-être que «at» est un peu plus facile à gérer mais néanmoins plus complexe que nohup.
miracle173