Linux-Mandrake: |
Guide de l'utilisateur |
et Manuel de référence |
MandrakeSoft
Janvier 2000 http://www.linux-mandrake.com
Nous avons mentionné dans une section précédente qu'il était possible d'avoir le contrôle des processus, et c'est ce que ce chapitre va vous apprendre à faire. Il est utile, pour bien comprendre les actions que nous allons effectuer ici, d'en savoir un peu plus.
De même que pour les fichiers, tous les processus en cours d'exécution sur un système Linux sont organisés sous forme d'arborescence, et chaque processus possède un numéro (son PID, Process ID, « identifiant du processus »), ainsi que le numéro de son processus parent (PPID, Parent Process ID, « identifiant du processus parent »).
Il existe par conséquent un processus au sommet de l'arborescence,
l'équivalent de la racine pour les systèmes de fichiers: init
(voir le Manuel de référence), qui possède toujours le numéro 1. La
section suivante détaillera deux commandes, ps
et
pstree
, qui permettent d'obtenir des informations sur les
processus en cours d'exécution.
Chaque processus sous Unix est susceptible de réagir à des
signaux qui lui sont envoyés. Il existe 31 signaux différents. Pour
chacun de ces signaux, le processus peut redéfinir le comportement par
défaut, sauf deux: le signal numéro 9 (KILL
), et le signal numéro
19 (STOP
).
Le signal 9 tue un processus de façon irrémédiable, sans lui laisser le
temps de se terminer correctement. C'est ce signal qu'il faut envoyer à
des processus dont vous ne pouvez plus rien faire. Une liste complète
des signaux est disponible en utilisant la commande kill -l
.
ps
et pstree
Ces deux commandes affichent une liste des processus existants sur le système selon les critères que vous voulez.
ps
Lancer cette commande sans argument montrera uniquement les processus dont vous êtes l'initiateur et qui sont rattachés au terminal que vous utilisez:
$ ps
PID TTY TIME CMD
5162 ttya1 00:00:00 zsh
7452 ttya1 00:00:00 ps
Les options sont nombreuses, citons les plus courantes:
a
: affiche aussi les processus lancés par les autres
utilisateurs;
x
: affiche aussi les processus n'ayant pas de terminal de
contrôle (c'est le cas de pratiquement tous les serveurs);
u
: affiche pour chaque processus le nom de l'utilisateur qui
l'a lancé et l'heure de son lancement.Il existe beaucoup d'autres options, vous vous reporterez à la page de
manuel pour plus d'informations (man ps
).
La sortie de cette commande est divisée en champs: celui qui vous
intéressera le plus est le champ PID
, qui contient
l'identificateur du processus. Le champ CMD
contient quant à lui
le nom de la commande exécutée.
Une façon très courante d'invoquer ps
est la suivante:
$ ps ax | less
Vous obtenez ainsi une liste de tous les processus en cours d'exécution, et pouvez ainsi repérer un ou plusieurs processus qui vous pose(nt) problème pour pouvoir ensuite le(s) tuer.
pstree
La commande pstree
affiche les processus sous forme
d'arborescence. Un avantage est que vous pouvez tout de suite voir qui
est le processus parent d'un autre: quand vous voulez tuer toute une
série de processus, s'ils sont tous pères et fils, il vous suffit de
tuer l'ancêtre commun. Vous aurez avantage à utiliser l'option
-p
, qui affiche le PID de chaque processus, ainsi que
l'option -u
qui affiche le nom de l'utilisateur ayant lancé le
processus. L'arborescence étant généralement longue, il est plus facile
d'invoquer pstree
de cette façon:
$ pstree -up | less
Vous avez ainsi une vue de toute l'arborescence des processus.
kill
, killall
et top
xkill
Si vous utilisez KDE, vous avez un raccourci pour tuer un processus X bloqué. En effet, vous disposez d'une icône bien reconnaissable sur le bureau, reproduite dans la figure 9.1.
xkill
Cette icône lance la commande xkill
que vous pouvez lancer
depuis un terminal. Quand vous cliquez sur cette icône (ou lancez le
programme de votre terminal), le curseur de la souris se transformera.
Vous devrez alors sélectionner avec un clic gauche la fenêtre
correspondant au processus que vous voulez tuer.
kill
, killall
Ces deux commandes permettent d'envoyer des signaux à des processus. La
commande kill
attend un numéro de processus en argument,
tandis que killall
attend un nom de commande.
Les deux commandes peuvent optionnellement recevoir un numéro de signal
en argument. Par défaut, elles envoient toutes deux le signal 15
(TERM
) à ou aux processus désigné(s). Par exemple, si vous voulez
tuer le processus de PID 785, vous entrerez la commande:
$ kill 785
Si vous voulez lui envoyer le signal 9, vous entrerez alors:
$ kill -9 785
Supposons que vous vouliez tuer un processus pour lequel vous connaissez
le nom de la commande. Au lieu de repérer le numéro du processus à
l'aide de ps
, vous pouvez tuer le processus directement:
$ killall -9 netscape
Quoi qu'il arrive, vous ne tuerez que vos propres processus (sauf si
vous êtes root
), donc ne vous inquiétez pas des processus
« du voisin » portant le même nom, ils ne seront pas affectés.
top
top
est un programme tout en un: il remplit à la fois les
fonctions de ps
et kill
. C'est un programme en
mode console, vous le lancerez donc depuis un terminal, comme exposé
dans la figure 9.2.
top
Le programme se contrôle entièrement au clavier. Une aide est disponible
en tapant sur 'h'
, mais elle est en anglais. Voici donc quelques
unes des commandes que vous pouvez utiliser:
'k'
: cette commande sert à envoyer un signal à un processus.
top
vous demandera alors le PID du processus suivi du
numéro du signal à envoyer (15 par défaut);
'M'
: cette commande sert à trier les processus selon la place
mémoire qu'ils occupent (champ %MEM
);
'P'
: cette commande sert à trier les processus selon le temps
CPU qu'ils consomment (champ %CPU
; c'est le tri par
défaut);
'u'
: cette commande sert à afficher les processus d'un
utilisateur donné, top
vous demandera lequel. Vous devez
entrer le nom de l'utilisateur, pas son UID. Si vous
n'entrez aucun nom, tous les processus seront affichés;
'i'
: cette commande fonctionne en tant que bascule; par
défaut, tous les processus, même endormis, sont affichés; cette commande
fera que seuls les processus en cours d'exécution seront affichés
(processus dont le champ STAT
indique R
, running)
et pas les autres. Un nouvel appel à cette commande reviendra à l'état
antérieur.