Quand dois-je utiliser «nohup» et quand dois-je utiliser «&»?

16

Je ne sais jamais quel est le meilleur moment pour utiliser nohup et le & à la fin de la commande.

Alex
la source

Réponses:

20

Nohup fait qu'un programme ignore le signal HUP, lui permettant de s'exécuter après la fermeture du terminal actuel / la déconnexion de l'utilisateur. Nohup n'envoie pas le programme en arrière-plan.
& à la fin de la commande est lié au contrôle des tâches shell, permettant à l'utilisateur de continuer à travailler dans la session shell actuelle.
Généralement, nohup et & sont combinés pour lancer un programme qui s'exécute après la déconnexion de l'utilisateur et permet de continuer le travail à la session shell actuelle.

Kristaps
la source
13

En règle générale, j'utilise &lorsque je veux exécuter en arrière-plan une commande qui ne prendra pas longtemps à exécuter, ou une où je ne me soucierai pas vraiment de la fin du programme si je suis déconnecté de façon inattendue d'une session.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

Lorsque je travaille sur un VPN ou une connexion à distance douteuse, j'ai tendance à utiliser nohuppour exécuter tout ce qui prendra un certain temps. Lors de l'exécution d'importations de données volumineuses sur un hôte distant, par exemple, vous pouvez utiliser nohuppour vous assurer que la déconnexion ne vous fera pas recommencer lorsque vous vous reconnecterez.

nohup ./do_data_load.py mydatafile.txt &

Il est également utilisé lorsqu'un développeur ne démonifie pas correctement un service, vous devez donc l'utiliser nohuppour vous assurer qu'il n'est pas tué lorsque vous vous déconnectez.

nohup sillyd &

Si vous oubliez d'utiliser nohuplors de l'exécution de quelque chose comme les deux derniers exemples, vous pouvez utiliser le bash ou zsh intégré disowndans le même effet.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

Il est assez rare de l'utiliser nohupsans &, car vous ne pouvez pas vraiment vous reconnecter à la session nohup'd si vous êtes déconnecté. Cela élimine à peu près son utilité pour les commandes interactives. Dans le cas où vous avez une commande interactive que vous souhaitez conserver pendant les sessions ou éviter des déconnexions compliquées, vous pouvez utiliser screen. La puissance de feu d'une screensession pleinement armée et opérationnelle est au-delà de la portée de ce poste, vous devriez donc la vérifier plus en détail .

Cakemox
la source
Je trouve tmux plus facile à configurer et à utiliser que screen. Aussi, licence BSD.
Kristaps
1
Vous pouvez également utiliser byobuce qui ajoute de belles fonctionnalités à l'écran. Il est disponible dans la plupart des dépôts apt et dans les dépôts EPEL pour Red Hat.
James
0

nohup: déconnecte l'utilisateur actuel, le processus ne s'arrêtera pas

&: avec ce symbole, il n'y aura pas de sortie dans le terminal actuel, le processus est exécuté en arrière-plan

anonyme
la source
4
là encore, nous sommes sortis, car & ne supprime pas la sortie standard et les flux d'erreur. vous devez utiliser la redirection de flux, comme cette commande (dans bash)> / dev / null 2> 1
Kristaps