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 utiliserTaskManager
, 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
kill -15 PID
: demande normale d'arret au processus, il peut refuser (-15 peut etre remplacé par SIGTERM)killall -9 httpd
: suppression plus radicale, en cas de processus récalcitrant ! (Le signal -9 par exemple s'appelle SIGKILLkill $(pidof ypserv)
: supprime le processus serveur NIS, dont le pid est obtenu le résultat de la commande pidofkillall -HUP httpd
: ordonne au processus de relire son fichier de configuration, ce qui évite de le relancer.kill -l
: pour connaitre la liste des signaux qu'on peut passer à kill.- Exemple : déconnecter radicalement l'utilisateur toto
ps aux | grep toto
---> toto 858 ............ -bash
kill -9 858
Connaitre l'état de la mémoire
La commandefree
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 processuslogin
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
danstty1
et danstty2
Lancermc
danstty1,
afficher un fichier
Danstty2
, repérer le numéroPID
du processusmc
, pour ensuite le supprimer parkill PID
.
Vérifier le résultat. - Lancer le serveur
X-KDE
parstartx
, passer en mode console dans un autre terminal, y repérer lePID
dekfm
, et le tuer.
Mais qu'avez-vous donc fait ? pouvez vous lancer des programmes ?
Ensuite, débarrassez-vous dekpanel
.
Bravo, admirez votre oeuvre, comment allez-vous pouvoir quitter proprement le serveurX
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