Par exemple, lorsque je tape ping 8.8.8.8 &
, pourquoi pouvons-nous voir le processus ping fonctionner ? Et quand je tape find / -name '*test*' &
, il est également visible sur le moniteur.
Pourquoi donc? N'est-ce pas vraiment en arrière-plan ?
Meilleure réponse
Le &
ordonne au shell d'exécuter la commande en arrière-plan, c'est-à-dire qu'elle est dérivée et exécutée dans un sous-shell séparé, en tant que tâche, de manière asynchrone.
Notez que lorsque vous mettez &
la sortie - à la fois stdout et stderr – sera toujours imprimé sur l'écran . Si vous ne voulez voir aucune sortie à l'écran, redirigez à la fois stdout
et stderr
à un fichier par :
myscript > ~/myscript.log 2>&1 &
Habituellement, vous voudrez peut-être supprimer le stderr
en le redirigeant vers /dev/null
si vous ne vous souciez pas d'analyser les erreurs plus tard.
Vous pouvez également exécuter des commandes/scripts en même temps, dans des sous-shells séparés. Par exemple ;
./script1 & ./script2 & ./script3 &
Une tâche en arrière-plan peut être ramenée à la ligne de commande avant qu'elle ne se termine avec la commande :
fg <job-number>
Le job-number
peut être obtenu en exécutant
jobs