Gestion et surveillance des processus
Généralités
- Un processus est un programme en cours d'exécution.
Il peut donc y avoir simultanément plusieurs processus du même programme en exécution en mémoire. Le noyau Linux lance, gére les processus et controle leur échanges avec les périphériques.
- On sait déjà que le premier processus, ancêtre de tous les autres, est init
Tous les autres sont créés par un processus parent et appartiennent à un utilisateur.
Ainsi en règle générale, à chaque nouvelle commande, le système lance un nouveau processus.
- Chaque processus est identifié par un numéro unique, son
PID
qu'il peut être important de connaître
- Pour lancer un processus en tâche de fond (en arrière-plan), faire suivre la commande du symbole &
Cela ordonne au processus parent de "reprendre la main", sans attendre la fin du processus "fils".
- Ainsi, dans une console où on a lancé
startx &
, on dispose toujours du processus shell pour lancer d'autres
commmandes.
- Autre exemple utile
tail -f /etc/httpd/logs/access.log > /dev/tty11 &
Les différentes sortes de processus
En plus des processus exécutés dans une session de travail en avant-plan (foreground), mode habituel de fonctionnement
et ceux qui sont lancés en tâche de fond, il existe des processus dits détachés qui ne sont exécutés dans aucune console (ps affiche alors
un ? au lieu du nom de console tty-).
Les processus détachés qui sont les exécutions de services du système (en particulier services réseaux) sont appelés daemons,
francisés en "démons".
L'administrateur n'ayant pas directement la main sur un démon (où taper Crtl-C pour stopper le programme ?), il doit lui envoyer un signal
pour le supprimer ou agir sur sa configuration. Cela s'effectue par la commande kill.
Pour connaitre tous les processus en cours de fonctionnement
ps
: liste les processus actifs lancés dans la console courante.
ps aux
: affiche la liste de tous les processus, avec leur numéro PID, le terminal tty où ils ont été lancés (sinon ?).
Voici la liste des colonnes du tableau obtenu .
- "USER" à quel utilisateur appartient le processus.
- "PID" est le numéro qui identifie le processus
- "%CPU" en % les ressources du microprocesseur utilisées par
le processus.
- "%MEM" en % les ressources en mémoire vive utilisées
par le processus.
- "RSS" mémoire réellement utilisée en ko
par le processus.
- "START" l'heure à laquelle le processus a été
lancé.
- ps aux | less : pour contrôler le défilement
- ps aux | grep httpd : pour n'afficher que les lignes concernant le processus cherché.
pstree | less
permet de visualiser la filiation des processus sous forme arborescente.
Sous X-KDE, on peut utiliser TaskManager
, qui montre cette arborescence graphiquement.
pidof httpd
, pour connaitre la liste des PID des processus d'un programme
- Le numéro PID d'un service est souvent stocké dans un fichier qui porte son nom, dans le répertoire /var/run
Pour modifier l'état d'un processus
On peut gérer les processus en leur envoyant des signaux par l'intermédiaire des commandes kill et killall,
suivant que l'on connaisse le numéro PID du processus, ou bien son nom.
Voici les principales actions que l'administrateur peut etre amené à utiliser
Connaitre l'état de la mémoire
La commande free
affiche la mémoire disponible, utilisée, libre ...
Connaitre les ressources utilisées par les processus
- La commande
top
affiche une page d'information, périodiquement mise à jour (taper q pour quitter), pour gérer les processus et être informé de la charge de travail du CPU et de l'utilisation mémoire.
- L'équivalent graphique existe sous X-KDE, lancer
K/système/gestionnaire de taches Ktop ou kpm ou ksysguard
Manipulations
- Comment vérifier que le processus
init
est bien le tout premier lancé par le noyau ?
- Comparer les PID fournies par la commande ps aux et les numéros conservés dans /var/run
- Connexions root dans tty1 et stagex dans tty2
Expliquer ce que signifie la commande suivante et noter les numéros PID
ps aux | grep login
Que se produira t-il si on supprime un processus login
dans tty2 ? dans tty1 ? Vérifier.
- Expliquer ce que réalise la commande suivante (information : man tail, option -f)
tail -f /etc/httpd/logs/access.log > /dev/tty11 &
Noter le PID, observer le contenu de la console tty11, ensuite supprimer cette tache de fond par kill -9 PID et vérifier.
- Comment connaitre l'état d'activité de la console tty3 ?
Se connecter (sous un compte quelconque) à la console tty3.
Passer la commande permettant de connaitre tous les processus qui concerne la console tty4.
Comment expliquer l'effet d'un tube (ou pipe) ?
- Connexion comme
stagex
dans tty1
et dans tty2
Lancer mc
dans tty1,
afficher un fichier
Dans tty2
, repérer le numéro PID
du processus mc
, pour ensuite le supprimer par
kill PID
.
Vérifier le résultat.
- Lancer le serveur
X-KDE
par startx
, passer en mode console dans un autre terminal, y repérer le PID
de kfm
, et le tuer.
Mais qu'avez-vous donc fait ? pouvez vous lancer des programmes ?
Ensuite, débarrassez-vous de kpanel
.
Bravo, admirez votre oeuvre, comment allez-vous pouvoir quitter proprement le serveur X
maintenant ?
Essayez de redémarrer le serveur X --> erreur : "remove /tmp/.X0-lock and start again".
Il n'y a qu'une solution, se débarrasser du processus parent qui est /etc/X11/X ..
ps aux |grep X ---> root PID=2128 /etc/X11/X ...
kill 2128