Je suis 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, y a-t-il une signification particulière?
J'ai des connaissances de base sur shell mais je n'ai jamais vu cela auparavant.
&
et&&
:&
exécute la première commande en arrière-plan;&&
exécute la première commande et passe conditionnellement à la seconde si elle se termine avec succès.Réponses:
Le
&
fait que la commande s'exécute en arrière-plan.De
man bash
:la source
De plus, 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: En utilisant le "&", je peux exécuter les deux services dans un terminal, via une seule connexion ssh à mon serveur .
***** Je viens de réaliser que ces processus exécutés via le "&" "resteront en vie" après la fermeture de la session ssh! assez soigné et utile si votre connexion au serveur est interrompue **
la source
nohup
maintiendra également les processus en vie.Quand on ne le dit pas autrement, les commandes prennent le dessus. Vous n'avez qu'un seul processus "de premier plan" en cours d'exécution dans une seule session shell. Le symbole & indique aux commandes de s'exécuter dans un processus d'arrière-plan et revient immédiatement à la ligne de commande pour des commandes supplémentaires.
Un processus d'arrière-plan ne restera pas actif après la fermeture de la session shell. SIGHUP met fin à tous les processus en cours. Par défaut de toute façon. Si votre commande dure longtemps ou s'exécute indéfiniment (c'est-à-dire: microservice), vous devez la suspendre avec nohup pour qu'elle reste en cours d'exécution après la déconnexion de la session:
EDIT: Il semble y avoir une zone grise concernant la fermeture des processus d'arrière-plan lorsque & est utilisé. Sachez simplement que le shell peut fermer votre processus en fonction de votre système d'exploitation et des configurations locales (en particulier sur CENTOS / RHEL): https://serverfault.com/a/117157 .
la source
Je ne sais pas avec certitude mais je lis un livre en ce moment et ce que j'obtiens, c'est qu'un programme doit gérer son signal (comme lorsque j'appuie sur
CTRL-C
). Maintenant, un programme peut utiliserSIG_IGN
pour ignorer tous les signaux ouSIG_DFL
pour restaurer l'action par défaut.Maintenant, si vous le faites,
$ command &
ce processus s'exécutant en arrière-plan ignore simplement tous les signaux qui se produiront. Pour les processus de premier plan, ces signaux ne sont pas ignorés.la source