Par exemple, quand je tape ping 8.8.8.8 &, pourquoi pouvons-nous voir le processus ping fonctionner? Et quand je tape find / -name '*test*' &, c'est aussi vu sur le moniteur.
Pourquoi donc? N'est-ce pas vraiment en arrière-plan?
Par exemple, quand je tape ping 8.8.8.8 &, pourquoi pouvons-nous voir le processus ping fonctionner? Et quand je tape find / -name '*test*' &, c'est aussi vu sur le moniteur.
Pourquoi donc? N'est-ce pas vraiment en arrière-plan?
Réponses:
Le commande &au shell d'exécuter la commande en arrière-plan, c'est-à-dire qu'il est bifurqué et exécuté dans un sous-shell séparé, en tant que travail, de manière asynchrone.
Notez que lorsque vous mettez &la sortie - stdout et stderr - sera toujours imprimée sur l'écran . Si vous ne voulez voir aucune sortie à l'écran, redirigez les deux stdoutet stderrvers un fichier en:
myscript > ~/myscript.log 2>&1 &
Habituellement, vous pouvez supprimer le fichier en le stderrredirigeant /dev/nullsi vous n'êtes pas inquiet d'analyser les erreurs ultérieurement.
Vous pouvez également exécuter des commandes / scripts en même temps, dans des sous-shells séparés. Par exemple;
./script1 & ./script2 & ./script3 &
Un travail d'arrière-plan peut être ramené à la ligne de commande avant de terminer avec la commande:
fg <job-number>
Le job-numberpeut être obtenu en exécutant
jobs
2>&1redirige stderrvers stdout.
stty tostoples travaux d'arrière-plan seront suspendus s'ils tentent d'écrire sur le terminal.
Lorsque vous utilisez &, le processus s'exécute en arrière-plan. Mais sa sortie standard reste le terminal.
En fait, vous pouvez exécuter ping 8.8.8.8 &et find / -name '*test*' &en même temps (résultant en une sortie mixte), mais vous ne pouvez pas exécuter ping 8.8.8.8et find / -name '*test*'en même temps sur le même shell.
Si vous ne voulez rien voir, utilisez quelque chose comme ping 8.8.8.8 &> /dev/null &.
En outre, vous souhaiterez peut-être en savoir plus sur nohupet disown.
disownn'empêche pas l'impression de la sortie sur le terminal.
/dev/nullcomme fichier pour rediriger la sortie du terminal si l'on veut supprimer la sortie au lieu de l'enregistrer quelque part. Et ai-je raison de2>&1redirigerstderrversstdout? Peut-être que vous voulez clarifier cela aussi ... Merci.