Suivant: Utilisation de l'éditeur Chapitre: Contrôle de processus Avant: Mise en tâche
Stopper et relancer des processus
Il y a encore une autre méthode pour passer un processus en tâche de fond. Vous pouvez lancer le programme tout à fait normalement (en avant-plan), puis le stopper, et ensuite le relancer en arrière-plan. Nous allons voir comment.
D'abord, lancez la commande yes en avant-plan, de manière tout à fait ordinaire:
Vous n'avez plus la main sur le shell, puisque le programme est en avant-plan.
Maintenant, au lieu de tuer le programme avec ctrl-C, nous allons suspendre le processus. Suspendre un processus ne le tue pas: il l'arrête temporairement jusqu'à ce que vous le relanciez. Pour réaliser cela, vous pressez la touche de suspension, qui est généralement ctrl-Z.
Tant que le job est suspendu, il ne tourne simplement pas. Aucun temps machine n'est utilisé pour le processus. Mais vous pouvez le relancer, et il se remettra à tourner comme si rien ne s'était passé, il repartira là où il en était.
Pour relancer le processus en avant-plan, utilisez la commande fg (qui signifie ``foreground'', avant-plan).
Le shell affiche le nom de la commande pour nous rafraîchir la mémoire, et nous indiquer quel est le job que nous venons de rappeler. Stoppez-le encore une fois, avec ctrl-Z. Cette fois, utilisez la commande bg qui le relancera, mais en tâche de fond. Le résultat sera alors exactement le même que si vous aviez dès le départ lancé la commande avec un `` &'' au bout.
Et nous retrouvons notre invite de shell. La commande jobs devrait indiquer que yes est en train de tourner, et nous pouvons tuer le processus avec kill comme nous l'avons fait tout à l'heure.
Comment pouvons nous stopper à nouveau ce processus ? La touche ctrl-Z ne marchera pas, puisqu'il est en tâche de fond. La solution est de repasser le job en avant-plan, avec fg, et ensuite de le stopper. Vous pouvez utiliser fg aussi bien sur les processus suspendus que ceux qui tournent en tâche de fond.
Il y a une grande différence entre un processus en arrière-plan et un processus suspendu. Un job suspendu ne fonctionne pas, il ne fait rien, il est figé. Il occupe juste de la mémoire. Un processus en arrière-plan fonctionne, utilise des ressources système, bien sûr. Parfois, un processus tournant en tâche de fond peut vouloir écrire du texte sur votre terminal, ce qui peut devenir gênant si vous travaillez sur autre chose pendant ce temps là. Par exemple si vous aviez utilisé la commande
sans rediriger la sortie sur /dev/null, un flot de y aurait envahi votre écran, ce qui n'est pas très pratique pour saisir son courrier pendant ce temps là... Et ce sans possibilité d'interruption, car ctrl-C ne fonctionne pas sur un programme en tâche de fond. La seule solution aurait été d'utiliser la commande kill à l'aveuglette.
Une autre remarque. Les commandes fg et bg passent en avant ou arrière plan le dernier processus qui a été suspendu (indiqué par `` +'' à coté du numéro de job sur ce qu'affiche la commande jobs). Si vous faites tourner plusieurs processus à la fois, vous pouvez passer le numéro de job en argument à fg ou bg pour préciser celui sur lequel vous voulez agir, comme ceci:
(pour passer en avant-plan le job numéro 2), ou
(pour passer en arrière-plan le job numéro 3). Vous ne pouvez pas utiliser les PID avec fg ou bg.
De plus, utiliser % et le numéro de job seuls, comme dans
est équivalent à
N'oubliez jamais que le contrôle de processus est une possibilité du shell. Les commandes fg, bg et jobs sont internes au shell. Si pour une raison quelconque vous utilisez un shell qui ne supporte pas le contrôle de processus, n'espérez pas y trouver ces commandes.
De plus, certains aspects du contrôle de jobs diffèrent entre Bash et Tcsh. En fait, certains shells ne supportent pas du tout le contrôle de processus, mais la plupart des ceux disponibles sous Linux le gèrent sans problèmes, soyez rassuré, vous avez un système moderne !
indexcontrôle de processus|)