385 lines
14 KiB
HTML
385 lines
14 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||
<title>Processus</title>
|
||
<link rel="stylesheet" href="../tuteurs.css" type="text/css" />
|
||
</head>
|
||
<body>
|
||
<div class="navigation">
|
||
<h1>Tuteurs informatique<br /><a href="../meta/contact.html">Nous contacter</a></h1>
|
||
<hr />
|
||
<ul class="menu">
|
||
<li>
|
||
<a href="../meta/charte_graphique.html">Utiliser ce site</a>
|
||
</li>
|
||
<li>
|
||
<a href="../actualite.html">Actu et stages</a>
|
||
</li>
|
||
<li>
|
||
<a href="../docs/">Docs à imprimer</a>
|
||
</li>
|
||
<li>
|
||
<a href="../meta/plan_site.html">Plan du site</a>
|
||
</li>
|
||
<li>
|
||
<a href="../search.html">Rechercher</a>
|
||
</li>
|
||
</ul>
|
||
<hr />
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="../">Les tuteurs</a>
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="./">Unix</a>
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="accents-base.html">Accents</a>
|
||
</li>
|
||
<li>
|
||
<a href="aide.html">Aide</a>
|
||
</li>
|
||
<li>
|
||
<a href="archives.html">Archiver</a>
|
||
</li>
|
||
<li>
|
||
<a href="chercher.html">Chercher</a>
|
||
</li>
|
||
<li>
|
||
<a href="clavier.html">Clavier, souris</a>
|
||
</li>
|
||
<li>
|
||
<a href="communiquer.html">Autres utilisateurs</a>
|
||
</li>
|
||
<li>
|
||
<a href="config/">Config conscrits</a>
|
||
</li>
|
||
<li>
|
||
<a href="copyright.html">Copyrights</a>
|
||
</li>
|
||
<li>
|
||
<a href="disquettes.html">Disquettes</a>
|
||
</li>
|
||
<li>
|
||
<a href="divers.html">Divers</a>
|
||
</li>
|
||
<li>
|
||
<a href="droits.html">Droits d'accès</a>
|
||
</li>
|
||
<li>
|
||
<a href="editeurs/">Éditeurs</a>
|
||
</li>
|
||
<li>
|
||
<a href="exercices/">Exercices</a>
|
||
</li>
|
||
<li>
|
||
<a href="fichiers.html">Fichiers</a>
|
||
</li>
|
||
<li>
|
||
<a href="formats-memo.html">Mémo formats</a>
|
||
</li>
|
||
<li>
|
||
<a href="histoire.html">Histoire</a>
|
||
</li>
|
||
<li>
|
||
<a href="imprimer.html">Imprimer</a>
|
||
</li>
|
||
<li>
|
||
<a href="jamais.html">Jamais !</a>
|
||
</li>
|
||
<li>
|
||
<a href="jeux.html">Jeux</a>
|
||
</li>
|
||
<li>
|
||
<a href="loguer.html">Se loguer</a>
|
||
</li>
|
||
<li>
|
||
<a href="media.html">Supports de données amovibles</a>
|
||
</li>
|
||
<li>
|
||
<a href="place_disque.html">Place disque</a>
|
||
</li>
|
||
<li>
|
||
<a href="prelude.html">Unix</a>
|
||
</li>
|
||
<li>
|
||
<a href="processus.html" class="actuel">Processus</a>
|
||
</li>
|
||
<li>
|
||
<a href="repertoires.html">Répertoires</a>
|
||
</li>
|
||
<li>
|
||
<a href="shell/">Shell</a>
|
||
</li>
|
||
<li>
|
||
<a href="systemes_fichiers.html">Systèmes de fichiers</a>
|
||
</li>
|
||
<li>
|
||
<a href="unix-technique.html">Machines Unix</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<hr />
|
||
<ul class="menu">
|
||
<li>
|
||
<a href="http://www.eleves.ens.fr/">Serveur des élèves</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://www.ens.fr/">ENS</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://www.spi.ens.fr/">SPI</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="corps">
|
||
<h1>Les processus sous Unix</h1>
|
||
<div class="sommaire">
|
||
<ul>
|
||
<li>
|
||
<a href="#fond">Mettre un processus en tâche de fond</a>
|
||
<ul>
|
||
<li>
|
||
<a href="#s1_1"><em>background</em> et <em>foreground</em></a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<a href="#ps">Voir les processus</a>
|
||
</li>
|
||
<li>
|
||
<a href="#kill">Tuer les procesus</a>
|
||
</li>
|
||
<li>
|
||
<a href="#controle">Contrôle des ressources</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="resume">
|
||
<p>
|
||
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.
|
||
</p>
|
||
</div>
|
||
<h2>
|
||
<a name="fond" id="fond">Mettre un processus en tâche de fond</a>
|
||
</h2>
|
||
<p>
|
||
Si on lance une commande qui prend beaucoup de temps (comme un calcul, ou une
|
||
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 :
|
||
</p>
|
||
<pre><span class="prompt">chaland ~ $</span> cc -o grosprogramme grosfichier.c &
|
||
|
||
<span class="prompt">chaland ~ $</span> xdvi monrapport.dvi &</pre>
|
||
<p>
|
||
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.
|
||
</p>
|
||
<p>
|
||
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.
|
||
</p>
|
||
<h3>
|
||
<a name="s1_1" id="s1_1"><em>background</em> et <em>foreground</em></a>
|
||
</h3>
|
||
<p>
|
||
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>).
|
||
</p>
|
||
<p>
|
||
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
|
||
<code>fg</code>).
|
||
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 :
|
||
</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><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 :
|
||
</p>
|
||
<ul>
|
||
<li>au premier plan, en tapant <code>fg</code> ;</li>
|
||
<li>en arrière-plan, en tapant <code>bg</code>.</li>
|
||
</ul>
|
||
<p>
|
||
Son exécution reprend alors là où on l'avait laissée.
|
||
</p>
|
||
<p>
|
||
Quand il n'y a qu'un seul programme en arrière-plan dans le terminal
|
||
courant, on peut le faire passer au premier plan en tapant <code>fg</code>.
|
||
Cela permet en particulier d'interrompre son exécution grâce à
|
||
<code>^C</code>, que la plupart des programmes comprennent.<code>^C</code>
|
||
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.
|
||
</p>
|
||
<p>
|
||
Vous pouvez pratiquer <code>^C</code>, <code>^Z</code>, <code>fg</code>,
|
||
<code>bg</code> de façon visuelle et didactique en lançant la commande
|
||
</p>
|
||
<pre>xdaliclock -seconds -geometry 500x100+0+0 -font BUILTIN</pre>
|
||
<p class="continue">
|
||
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.
|
||
</p>
|
||
<p>
|
||
Résumé :
|
||
</p>
|
||
<ul>
|
||
<li>Le programme tourne au premier plan :
|
||
<ul><li><code>^Z</code> le suspend ;</li><li><code>^C</code> l'interrompt.</li></ul>
|
||
</li>
|
||
<li>Le programme est suspendu :
|
||
<ul><li><code>fg</code> le passe au premier plan ;</li><li><code>bg</code> le passe en arrière-plan.</li></ul>
|
||
</li>
|
||
<li>Le programme tourne en arrière-plan :
|
||
<ul><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></ul>
|
||
</li>
|
||
<li>Le programme ne tourne pas :
|
||
<ul><li>il n'y a rien à faire...</li></ul>
|
||
</li>
|
||
</ul>
|
||
<h2>
|
||
<a name="ps" id="ps">Voir les processus</a>
|
||
</h2>
|
||
<p>
|
||
La commande <code>ps</code> montre où en sont les tâches de fond :
|
||
</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><code>ps</code> affiche la liste des processus que vous avez lancés :
|
||
</p>
|
||
<ul>
|
||
<li><code>PID</code> (<em>process identificator</em>) : c'est le numéro du
|
||
processus.
|
||
</li>
|
||
<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).
|
||
</li>
|
||
<li><code>STAT</code> : indique l'état du processus :
|
||
<ul><li><code>R</code> : actif ( <em>running</em>)</li><li><code>S</code> : non activé depuis moins de 20 secondes
|
||
(<em>sleeping</em>)</li><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></ul>
|
||
</li>
|
||
<li><code>TIME</code> : indique le temps machine utilisé par le programme (et
|
||
non pas le temps depuis lequel le processus a été lancé !).
|
||
</li>
|
||
</ul>
|
||
<p>
|
||
La commande <code>ps</code> a différentes options, dont les suivantes :
|
||
</p>
|
||
<ul>
|
||
<li><code>a</code> (<em>all</em>) : donne la liste de tous les processus, y
|
||
compris ceux dont vous n'êtes pas propriétaire.
|
||
</li>
|
||
<li><code>g</code> (global, général...) : donne la liste de tous les processus
|
||
dont vous êtes propriétaire.
|
||
</li>
|
||
<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.).
|
||
</li>
|
||
<li><code>x</code> : affiche aussi les processus qui ne sont pas associés à un
|
||
terminal.
|
||
</li>
|
||
<li><code>w</code> : ne tronque pas à 80 caractères (peut être utilisée deux fois pour ne pas tronquer du tout)
|
||
</li>
|
||
</ul>
|
||
<p><code>ps agux</code> est en fait souvent utilisé pour avoir des informations sur
|
||
tout les processus.
|
||
</p>
|
||
<p>
|
||
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
|
||
processus, les plus gourmands en premier. C'est rigolo quand la machine rame,
|
||
et c'est très instructif sur les processus gourmands en ressources...
|
||
Le logiciel KSysGuard, accessible sous la config KDE par la combinaison
|
||
de touches <code>^Esc</code>, fait la même chose que <code>top</code> en
|
||
mode graphique.
|
||
</p>
|
||
<h2>
|
||
<a name="kill" id="kill">Tuer les procesus</a>
|
||
</h2>
|
||
<p>
|
||
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,
|
||
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
|
||
cependant ça ne marche pas, utilisez la commande <code>kill</code> (plus le
|
||
numéro du processus).
|
||
</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><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
|
||
moyen de faire quoi que ce soit avant de mourir.
|
||
</p>
|
||
<h2>
|
||
<a name="controle" id="controle">Contrôle des ressources</a>
|
||
</h2>
|
||
<p>
|
||
La possibilité d'exécuter plusieurs commandes à la fois (et aussi sur
|
||
plusieurs machines) pose un problème immédiat de coexistence pacifique. Ce
|
||
n'est pas gentil de lancer tous ses programmes de calcul lourds sur la
|
||
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 :
|
||
</p>
|
||
<ul>
|
||
<li><code>nice</code> exécute un programme à priorité plus basse (faire
|
||
<code>man nice</code>).
|
||
</li>
|
||
<li><code>limit</code> (commande interne du shell) permet de limiter les
|
||
ressources à disposition de votre processus (très utile typiquement avec
|
||
<code>maple</code> ou autres applications gourmandes en mémoire) (faire
|
||
<code>man csh</code>, <code>man zshbuiltins</code>).
|
||
</li>
|
||
</ul>
|
||
<div class="metainformation">
|
||
Dernière modification : 2011-07-09 par Antoine Amarilli.
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|