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
  • 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 SIGKILL
  • kill $(pidof ypserv) : supprime le processus serveur NIS, dont le pid est obtenu le résultat de la commande pidof
  • killall -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 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

  1. Comment vérifier que le processus init est bien le tout premier lancé par le noyau ?

  2. Comparer les PID fournies par la commande ps aux et les numéros conservés dans /var/run

  3. 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.

  4. 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.

  5. 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) ?

  6. 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.

  7. 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