Que signifie le symbole esperluette (&) avec «nohup»?

11

J'ai vu des tonnes d'exemples où a &suit la fin d'une chaîne de commande, mais je n'arrive pas à trouver d'explication sur ce qu'il fait. Ce n'est même pas dans nohupla manpage de. Est-ce un truc de coquille?

&Que ce soit en utilisant ou non, je trouve que tout processus exécuté nohupsemble présenter une immunité à tout signal de raccrochage.

Chad Harrison
la source
1
"Je trouve que tout processus exécuté avec nohup semble présenter une immunité à tout signal de raccrochage." C'est pour ça que rien.
Samuel Edwin Ward
Ok, alors laissez-moi clarifier: les seuls exemples que j'ai vus utilisent le &, donc je ne savais pas s'il y &avait une sorte de modificateur ou d'argument qui faisait nohupse comporter différemment.
Chad Harrison
1
C'est une chose raisonnable à soupçonner. En fait, il ne modifie pas le comportement nohup (nohup ne peut même pas le voir) mais modifie le comportement du shell.
Samuel Edwin Ward
nohup & -> No Hangup et arrière-plan. Du bon vieux temps des modems et des terminaux série. Lorsque mon terminal et mon modem se déconnectent, continuez de les traiter en arrière-plan afin que le travail soit terminé lors de ma prochaine connexion.
Fiasco Labs

Réponses:

19

Depuis la page de manuel bash :

Si une commande est terminée par l'opérateur de contrôle &, le shell exécute la commande en arrière-plan dans un sous-shell. Le shell n'attend pas la fin de la commande et l'état de retour est 0.

Alors oui, c'est une chose shell, et peut être utilisé avec n'importe quelle commande. Il vous rend essentiellement le contrôle immédiatement et permet à la commande de se terminer en arrière-plan. Ceci est presque toujours utilisé avec nohupcar vous voulez généralement quitter le shell après avoir démarré la commande.

mgorven
la source
4
Je vous ai vu publier un tas de bonnes réponses ces derniers temps et mon cerveau traduit toujours votre nom d'utilisateur en McGuyver. Je ne sais pas pourquoi je ressens le besoin de vous le dire.
MDMarra
1
@MDMarra Je vais prendre ça comme un compliment ;-)
mgorven
1
@MDMarra Au moins tu ne penses pas: "McGruber"
Ward - Réintègre Monica
7

L'utilisation de l'esperluette (&) exécutera la commande dans un processus enfant (enfant de la session bash en cours). Cependant, lorsque vous quittez la session, tous les processus enfants seront supprimés.

l'utilisation de nohup + esperluette (&) fera la même chose, sauf qu'à la fin de la session, le parent du processus enfant sera changé en "1" qui est le processus "init", préservant ainsi l'enfant d'être tué.

Michel
la source
3

Oui, c'est une chose shell - il exécute la commande en arrière-plan, vous n'avez donc pas à attendre le retour de la commande actuelle avant d'émettre d'autres commandes.

Rob
la source