suivant chapitre avant contenu index

Suivant: Stopper et relancer Chapitre: Contrôle de processus Avant: Avant-plan et arrière-plan


Mise en tâche de fond et interruption

Commençons par un exemple simple. La commande yes est un programme pouvant paraître inutile qui se borne à afficher indéfiniment des séries de y' sur la sortie standard (C'est utilisé pour répondre automatiquement ``yes'' à des programmes qui demandent de multiples confirmations). Essayez la.

            Les y continueront à défiler à l'infini. Vous pouvez tuer le processus en pressant votre touche d'interruption, qui est probablement ctrl-C. Afin de ne pas être gênés par ce flux de y, redirigons la sortie du programme vers /dev/null. Vous vous souvenez sans doute que /dev/null absorbe toutes les données, tout ce qu'on lui passe disparaît à jamais. C'est une méthode très efficace pour faire taire un programme.

Ah, c'est beaucoup mieux comme ça ! Rien ne s'affiche, mais l'invite du shell ne revient pas. C'est parceque yes est toujours en train de tourner, et envoie frénétiquement des milliers de y dans /dev/null. Là encore, pour arrêter le programme, utilisez la touche d'interruption.

Supposons maintenant que nous voulions que yes continue à fonctionner, mais tout en récupérant l'interactivité de notre shell pour travailler sur autre chose. Nous pouvons passer yes en arrière-plan, ce qui lui permettra de tourner, sans avoir besoin de notre clavier.

   

La première méthode traditionnelle pour lancer un programme en tâche de fond, est de rajouter le caractère `` &'' à la fin de la ligne de commande.

Hop, vous voyez, l'invite de notre shell est de retour. Mais qu'est-ce que ce `` [1] 164''? Et est-ce que yes est réellement en train de tourner ?

Le numéro `` [1]'' représente le numéro de job du processus yes. Le shell assigne un tel numéro pour chaque job. Comme yes est le seul pour l'instant, il porte le numéro 1. Le nombre `` 164'' est l'identificateur de processus sur le système, le PID. L'un ou l'autre de ces nombres peut être utilisé pour se référer au job, comme nous le verrons plus loin.

  Vous avez donc maintenant le processus yes en tâche de fond, envoyant continuellement des y sur /dev/null. Pour vérifier l'état de ce processus, utilisez la commande interne du shell: jobs.

D'accord, il est bien là. Vous pourriez aussi utiliser la commande ps comme nous l'avons vu au début, pour vérifier si le programme tourne bien.

      Pour terminer le processus, il faut utiliser la commande kill. Cette commande prend en argument, soit un identificateur de processus, soit un numéro de job. C'était le job numéro 1, aussi la commande

``tuera'' le processus. Lorsque vous utilisez le numéro de job pour spécifier le processus, vous devez préfixer le nombre par le caractère `` %'' (pourcent).

Maintenant que nous avons tué le processus, nous pouvons essayer la commande jobs encore une fois pour voir son état:

En fait le job est terminé, et si nous utilisons jobs encore une fois, plus rien ne s'affichera à l'écran.

Vous pouvez également tuer le job en utilisant le PID (identificateur de processus), qui s'est affiché lorsque vous l'avez lancé. Dans notre exemple, le PID est 164, aussi la commande

est équivalente à

Vous ne devez pas rajouter le `` %'' lorsque vous indiquez le PID.



suivant chapitre avant contenu index

Suivant: Stopper et relancer Chapitre: Contrôle de processus Avant: Avant-plan et arrière-plan


Jean-Michel Antoine
Mon Apr 3 16:04:54 MET DST 1995