2009-09-20 12:34:28 +02:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<!DOCTYPE html
|
|
|
|
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
|
|
|
|
"tuteurs://DTD/tml.dtd">
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>Processus</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>Les processus sous Unix</h1>
|
|
|
|
|
|
|
|
|
|
<div class="resume">
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Unix est un système <em>multi-tâches</em>, c'est-à-dire qu'il peut exécuter
|
|
|
|
|
plusieurs programmes à la fois. Un processus est une instance d'un programme
|
|
|
|
|
en train de s'exécuter, une tâche. Le shell crée un nouveau processus pour
|
|
|
|
|
exécuter chaque commande.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2><a name="fond">Mettre un processus en tâche de fond</a></h2>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Si on lance une commande qui prend beaucoup de temps (comme un calcul, ou une
|
2009-09-20 12:27:14 +02:00
|
|
|
|
nouvelle fenêtre), on peut l'interrompre par <code>Control-C</code>. Ceci
|
|
|
|
|
interrompt (définitivement) la commande. On peut aussi exécuter une commande
|
|
|
|
|
en <em>tâche de fond</em>. Le shell rend alors la main avant la fin de la
|
|
|
|
|
commande. Pour le faire, on ajoute un <code>&</code> à la fin de la
|
|
|
|
|
commande ; par exemple :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">chaland ~ $</span> cc -o grosprogramme grosfichier.c &
|
|
|
|
|
|
|
|
|
|
<span class="prompt">chaland ~ $</span> xdvi monrapport.dvi &</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Dans le premier exemple, on lance le compilateur <code>cc</code> en parallèle
|
|
|
|
|
avec le shell; dans le second exemple, on met le <code>dvi</code> en tâche de
|
|
|
|
|
fond, ce qui évite d'avoir à le relancer à chaque modification.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
On reprend la main immédiatement, sans attendre la fin de l'exécution de
|
|
|
|
|
la commande. On peut donc taper d'autres commandes dans le même terminal,
|
|
|
|
|
pendant que la précédente s'exécute.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3><em>background</em> et <em>foreground</em></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Comme on vient de le voir, si vous avez pensé à terminer votre ligne de
|
|
|
|
|
commande par une esperluette, le programme que vous avez lancé tourne en
|
|
|
|
|
arrière-plan (<em>background</em>, abrégé en <code>bg</code>).
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Si vous avez omis l'esperluette, le programme prend la précédence sur le shell.
|
|
|
|
|
On dit qu'il tourne au premier plan (<em>foreground</em>, abrégé en
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<code>fg</code>).
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Les lignes tapées au clavier sont mémorisées mais ne seront pas exécutées par le
|
|
|
|
|
shell avant que le programme en cours d'exécution n'ait fini son calcul. Vous
|
|
|
|
|
pouvez malgré tout faire passer ce programme en tâche de fond, grâce à la
|
|
|
|
|
manipulation suivante :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">chaland ~ $</span> xdvi rapport.dvi
|
|
|
|
|
^Z
|
|
|
|
|
zsh: suspended xdvi rapport.dvi
|
|
|
|
|
<span class="prompt">chaland ~ $</span> bg
|
|
|
|
|
[1] + continued xdvi rapport.dvi
|
|
|
|
|
<span class="prompt">chaland ~ $</span></pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>^Z</code> est un signal intercepté par le shell, qui suspend
|
|
|
|
|
l'exécution du programme sans détruire le processus correspondant. Les
|
|
|
|
|
calculs déjà effectués par ce programme ne sont pas perdus. Dans l'exemple
|
|
|
|
|
précédent, si on demande à un <code>xdvi</code> suspendu de changer de page
|
|
|
|
|
(<code>SPC</code>), il ne le fera pas, mais il se souviendra de le faire dès
|
|
|
|
|
qu'il aura à nouveau accès aux ressources de l'ordinateur.
|
|
|
|
|
À partir de l'état suspendu, on peut faire passer un programme :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>au premier plan, en tapant <code>fg</code> ;</li>
|
|
|
|
|
<li>en arrière-plan, en tapant <code>bg</code>.</li>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Son exécution reprend alors là où on l'avait laissée.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Quand il n'y a qu'un seul programme en arrière-plan dans le terminal
|
2002-11-23 18:46:52 +01:00
|
|
|
|
courant, on peut le faire passer au premier plan en tapant <code>fg</code>.
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Cela permet en particulier d'interrompre son exécution grâce à
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<code>^C</code>, que la plupart des programmes comprennent.<code>^C</code>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
n'affecte que l'éventuel unique programme qui tourne au premier plan dans le
|
|
|
|
|
terminal où il est tapé. Quand il y en a plusieurs, c'est un peu plus
|
|
|
|
|
compliqué, mais c'est bien sûr possible.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Vous pouvez pratiquer <code>^C</code>, <code>^Z</code>, <code>fg</code>,
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>bg</code> de façon visuelle et didactique en lançant la commande
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>xdaliclock -seconds -geometry 500x100+0+0 -font BUILTIN</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
et en observant attentivement les secondes (pensez à en laisser
|
|
|
|
|
quelques-unes s'écouler). Vous remarquerez que ce programme finit la
|
|
|
|
|
transition en cours avant de se remettre à l'heure.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Résumé :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>Le programme tourne au premier plan :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>^Z</code> le suspend ;</li>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<li><code>^C</code> l'interrompt.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>Le programme est suspendu :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>fg</code> le passe au premier plan ;</li>
|
|
|
|
|
<li><code>bg</code> le passe en arrière-plan.</li>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>Le programme tourne en arrière-plan :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>si c'est le seul dans ce cas, <code>fg</code> le passe au premier plan ;</li>
|
|
|
|
|
<li>sinon, c'est plus compliqué.</li>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>Le programme ne tourne pas :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>il n'y a rien à faire...</li>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2><a name="ps">Voir les processus</a></h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La commande <code>ps</code> montre où en sont les tâches de fond :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">chaland ~ $</span> ps
|
|
|
|
|
PID TT STAT TIME COMMAND
|
|
|
|
|
4450 p9 S 0:00 /usr/local/bin/lcsh
|
|
|
|
|
4782 p9 S 0:02 cc -o grosprogramme grosfichier.c
|
|
|
|
|
4841 p9 R 0:00 ps</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>ps</code> affiche la liste des processus que vous avez lancés :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>PID</code> (<em>process identificator</em>) : c'est le numéro du
|
2002-11-23 18:46:52 +01:00
|
|
|
|
processus.
|
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>TT</code> : indique le terminal dans lequel a été lancé le processus.
|
|
|
|
|
Un point d'interrogation signifie que le processus n'est attaché à aucun
|
|
|
|
|
terminal (par exemple les démons).
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>STAT</code> : indique l'état du processus :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>R</code> : actif ( <em>running</em>)</li>
|
|
|
|
|
<li><code>S</code> : non activé depuis moins de 20 secondes
|
2002-11-23 18:46:52 +01:00
|
|
|
|
(<em>sleeping</em>)</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>I</code> : non activé depuis plus de 20 secondes (<em>idle</em>)</li>
|
|
|
|
|
<li><code>T</code> : arrêté (suspendu)</li>
|
|
|
|
|
<li><code>Z</code> : zombie</li>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>TIME</code> : indique le temps machine utilisé par le programme (et
|
|
|
|
|
non pas le temps depuis lequel le processus a été lancé !).
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La commande <code>ps</code> a différentes options, dont les suivantes :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>a</code> (<em>all</em>) : donne la liste de tous les processus, y
|
|
|
|
|
compris ceux dont vous n'êtes pas propriétaire.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>g</code> (global, général...) : donne la liste de tous les processus
|
|
|
|
|
dont vous êtes propriétaire.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>u</code> (<em>user</em>, utilisateur) : donne davantage
|
|
|
|
|
d'informations (nom du propriétaire, heure de lancement, pourcentage de
|
|
|
|
|
mémoire occupée par le processus, etc.).
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>x</code> : affiche aussi les processus qui ne sont pas associés à un
|
2002-11-23 18:46:52 +01:00
|
|
|
|
terminal.
|
|
|
|
|
</li>
|
2011-07-09 21:37:38 +02:00
|
|
|
|
<li><code>w</code> : ne tronque pas à 80 caractères (peut être utilisée deux fois pour ne pas tronquer du tout)
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>ps agux</code> est en fait souvent utilisé pour avoir des informations sur
|
2002-11-23 18:46:52 +01:00
|
|
|
|
tout les processus.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La commande <code>top</code> affiche les mêmes informations, mais de façon
|
|
|
|
|
dynamique : elle indique en fait par ordre décroissant le temps machine des
|
2002-11-23 18:46:52 +01:00
|
|
|
|
processus, les plus gourmands en premier. C'est rigolo quand la machine rame,
|
2009-09-20 12:27:14 +02:00
|
|
|
|
et c'est très instructif sur les processus gourmands en ressources...
|
2006-09-17 22:47:20 +02:00
|
|
|
|
Le logiciel KSysGuard, accessible sous la config KDE par la combinaison
|
2009-09-20 12:27:14 +02:00
|
|
|
|
de touches <code>^Esc</code>, fait la même chose que <code>top</code> en
|
2006-09-17 22:47:20 +02:00
|
|
|
|
mode graphique.
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2><a name="kill">Tuer les procesus</a></h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Les programmes ont tous une commande spécifique pour les quitter
|
|
|
|
|
(<code>q</code>, menu où cliquer, etc). C'est seulement dans le cas où vous
|
|
|
|
|
ne parvenez pas à les quitter correctement, pour une raison ou une autre,
|
2002-11-23 18:46:52 +01:00
|
|
|
|
que vous pouvez avoir besoin de tuer le processus.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Avant toute chose, essayez de taper <code>^C</code> ou <code>^D</code>. Si
|
2009-09-20 12:27:14 +02:00
|
|
|
|
cependant ça ne marche pas, utilisez la commande <code>kill</code> (plus le
|
|
|
|
|
numéro du processus).
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">chaland ~ $</span> ps
|
|
|
|
|
PID TT STAT TIME COMMAND
|
|
|
|
|
4450 p9 S 0:00 /usr/local/bin/lcsh
|
|
|
|
|
4782 p9 S 0:02 cc -o grosprogramme grosfichier.c
|
|
|
|
|
4841 p9 R 0:00 ps
|
|
|
|
|
<span class="prompt">chaland ~ $</span> kill 4782
|
|
|
|
|
<span class="prompt">chaland ~ $</span> ps
|
|
|
|
|
PID TT STAT TIME COMMAND
|
|
|
|
|
4450 p9 S 0:00 /usr/local/bin/lcsh
|
|
|
|
|
4851 p9 R 0:00 ps</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>kill -9</code> tue le processus à tous les coups. Vous ne pouvez tuer que
|
|
|
|
|
les processus dont vous êtes propriétaire. Il convient de ne l'utiliser que
|
|
|
|
|
si aucune autre méthode ne marche, car dans ce cas le programme n'a aucun
|
2002-11-23 18:46:52 +01:00
|
|
|
|
moyen de faire quoi que ce soit avant de mourir.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2><a name="controle">Contrôle des ressources</a></h2>
|
2002-11-23 18:46:52 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La possibilité d'exécuter plusieurs commandes à la fois (et aussi sur
|
|
|
|
|
plusieurs machines) pose un problème immédiat de coexistence pacifique. Ce
|
2002-11-23 18:46:52 +01:00
|
|
|
|
n'est pas gentil de lancer tous ses programmes de calcul lourds sur la
|
2009-09-20 12:27:14 +02:00
|
|
|
|
machine d'un copain et partir en vacances le weekend : il peut arriver (et il
|
|
|
|
|
est arrivé) qu'il ne puisse même plus se connecter. Voilà quelques outils
|
|
|
|
|
pour vivre paisiblement :
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><code>nice</code> exécute un programme à priorité plus basse (faire
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<code>man nice</code>).
|
|
|
|
|
</li>
|
2011-07-09 21:38:34 +02:00
|
|
|
|
<li><code>limit</code> (commande interne du shell) permet de limiter les
|
2009-09-20 12:27:14 +02:00
|
|
|
|
ressources à disposition de votre processus (très utile typiquement avec
|
|
|
|
|
<code>maple</code> ou autres applications gourmandes en mémoire) (faire
|
2002-11-23 18:46:52 +01:00
|
|
|
|
<code>man csh</code>, <code>man zshbuiltins</code>).
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<div class="metainformation">
|
2009-09-27 22:00:55 +02:00
|
|
|
|
<date value="from git" />
|
2002-11-23 18:46:52 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|