Vous aurez remarqué que quand vous
lancez une commande à partir d'un Terminal
, vous devez
normalement attendre que la commande soit terminée pour que le
shell vous rende la main : c'est que vous avez lancé la
commande au premier plan. Il y a des
situations, cependant, où cela n'est pas souhaitable.
Supposons, par exemple, que vous ayez
entrepris de copier récursivement un gros répertoire vers un
autre. Vous décidez également d'ignorer les erreurs, donc vous
redirigez le canal d'erreur vers
/dev/null
:
cp -R images/ /shared/ 2>/dev/null
Une telle commande peut prendre plusieurs minutes avant de se terminer. Vous disposez alors de deux solutions : la première, brutale, est d'interrompre (de « tuer ») la commande pour la relancer plus tard, quand vous aurez le temps. Pour ce faire, tapez Ctrl-C : cela terminera le processus et vous retournerez alors à l'invite. Mais attendez, ne faites pas ça ! Lisez plutôt ce qui suit.
Supposons que vous vouliez exécuter une commande pendant que vous faites quelque chose d'autre. La solution est de placer le processus en arrière-plan. Pour ce faire, tapez d'abord Ctrl-Z pour suspendre le processus :
$ cp -R images/ /shared/ 2>/dev/null # Tapez Ctrl+z ici [1]+ Stopped cp -R images/ /shared/ 2>/dev/null $
et vous voilà à nouveau devant
l'invite. Le processus est alors suspendu, dans l'attente d'être
relancé (comme l'indique le mot-clé Stopped
,
soit arrêté). Vous allez le relancer mais en le maintenant en
arrière-plan. Tapez bg (pour
BackGround, soit arrière-plan)
provoquera exactement l'effet escompté :
$ bg [1]+ cp -R images/ /shared/ 2>/dev/null & $
Le processus aura alors repris son exécution en tâche de fond, ce qu'indique le signe & (esperluette) à la fin de la ligne. Vous vous retrouvez alors en face de l'invite et pouvez continuer à travailler. Un processus qui tourne en tâche de fond, ou arrière-plan, est appelé un job .
Vous pouvez bien sûr lancer directement des processus en tâche de fond, justement en ajoutant une & à la fin de la commande. Ainsi, vous pouvez lancer la copie du répertoire en arrière-plan en écrivant :
$ cp -R images/ /shared/ 2>/dev/null &
Si vous le souhaitez, vous pouvez également remettre ce processus au premier plan et attendre qu'il se termine en tapant fg (pour ForeGround, soit premier plan). Répétez alors la séquence Ctrl-Z, bg pour le remettre à l'arrière-plan.
Vous pouvez lancer plusieurs jobs de
cette façon : chacune de ces commandes recevra alors un numéro
de job. La commande jobs du shell indique la liste de
tous les jobs associés au shell courant. Le job précédé d'un
signe +
désigne le dernier processus mis en
tâche de fond. Pour remettre un job en particulier au premier
plan, vous pourrez alors taper fg <n> où
<n>
désigne le numéro de job, par exemple
fg 5.
Notez que vous pouvez également suspendre ou lancer de cette façon des applications en mode plein écran (si elles sont correctement programmées), telles que less ou un éditeur de texte comme Vi, et les remettre au premier plan quand vous le voulez.