web-dev-qa-db-fra.com

Que signifie "&" à la fin d'une commande linux?

Je suis un administrateur système et on m'a demandé d'exécuter un script linux pour nettoyer le système.

La commande est la suivante:

Perl script.pl > output.log &

donc cette commande se termine par un signe &, a-t-il une signification particulière?

J'ai des connaissances de base sur Shell, mais je ne l'ai jamais vu auparavant.

64
Dude

Le & permet d'exécuter la commande en arrière-plan.

De man 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. La coquille fait n'attendez pas que la commande se termine, et l'état de retour est 0.

110
mgarciaisaia

En outre, vous pouvez utiliser le signe "&" pour exécuter de nombreux processus via une (1) connexion ssh afin de conserver un nombre minimum de terminaux. Par exemple, j'ai un processus qui écoute les messages afin d'extraire des fichiers, le deuxième processus écoute les messages afin de télécharger des fichiers: À l'aide de "&", je peux exécuter les deux services dans un terminal, via une connexion SSH unique à mon serveur .


***** Je viens de me rendre compte que ces processus passant par "&" resteront également "en vie" après la fermeture de la session ssh! très soigné et utile si votre connexion au serveur est interrompue ** 

10
Zack S

Quand rien n'est dit, les commandes prennent le premier plan. Vous n'avez qu'un seul processus "au premier plan" en cours d'exécution dans une seule session Shell. Le symbole & indique aux commandes de s’exécuter en arrière-plan et revient immédiatement à la ligne de commande pour les commandes supplémentaires.

sh my_script.sh &

Un processus d'arrière-plan ne pas reste en vie après la fermeture de la session Shell. SIGHUP termine tous les processus en cours d'exécution. Par défaut quand même. Si votre commande est longue ou fonctionne indéfiniment (c'est-à-dire: microservice), vous devez la suspendre avec Nohup afin qu'elle continue à s'exécuter après la déconnexion de la session:

Nohup sh my_script.sh &

EDIT: Il semble y avoir une zone grise concernant la fermeture des processus en arrière-plan lorsque & est utilisé. Sachez simplement que le shell peut fermer votre processus en fonction de votre système d'exploitation et de vos configurations locales (en particulier sous CENTOS/RHEL): _ { https://serverfault.com/a/117157 .

4
Timothy Jannace

Je ne sais pas avec certitude, mais je lis un livre en ce moment et ce que je comprends, c’est qu’un programme doit gérer son signal (comme lorsque j’appuie sur CTRL-C). Maintenant, un programme peut utiliser SIG_IGN pour ignorer tous les signaux ou SIG_DFL pour restaurer l'action par défaut. Maintenant, si vous faites $ Command & Ensuite, ce processus exécuté en arrière-plan ignore simplement tous les signaux qui se produiront. Pour les processus au premier plan, ces signaux ne sont pas ignorés.

0
Kaustubh Kislay