3.6. Lancement et manipulation de processus en arrière-plan

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 contrôle : 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 d'être exécutée. 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 C-c : cela terminera le processus et vous retournerez alors à l'invite. Mais attendez, ne faites pas ça ! Continuez à lire.

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 C-z pour suspendre le processus :

$ cp -R images/ /shared/ 2>/dev/null
  # Tapez C-z
[1]+  Stopped                 cp -R images/ /shared/ 2>/dev/null
$

et vous revoilà devant l'invite. Le processus est alors suspendu, dans l'attente d'être relancé (comme l'indique le mot-clé Stopped, arrêté). Vous allez le relancer mais en le maintenant en arrière-plan. Tapez bg (pour BackGround, 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, premier plan). Répétez alors la séquence C-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 au premier plan un job en particulier, vous pourrez alors taper fg <n><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 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.


Tux sur Étoile de MandrakeSoft Linux est une marque déposée de Linus Torvalds. Toutes les autres marques et copyrights sont la propriété de leurs auteurs respectifs.
Sauf mention contraire, tout le contenu de ces pages et toutes les images sont Copyright MandrakeSoft S.A. et MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/