Gestion des processus sur Linux Debian

Un processus est l'instance d'exécution d'un programme dans un contexte donné. Plusieurs processus d'un même programme peuvent s'exécuter parallèlement sur le même serveur, et exécuter par des utilisateurs différents. Nous verrons ici un ensemble d'instructions permettant la gestion de ces processus sur une machine Debian.

Lister et gérer les processus

La commande top ou htop

Pour lister les processus tournant sur la machine Debian, on peut utiliser la commande top.

top

Pour ma part, je préfère utiliser le programme htop qui est plus complet que top.

htop n'est pas installé nativement sur Debian. Il faut l'installer avec aptitude ou apt-get, comme ceci : aptitude install htop

htop

La commande ps

La commande ps permet d'afficher les processus en cours d'exécution.

  • Afficher les processus de l'utilisateur en cours
ps
  • Afficher tous les processus en cours d'exécution sur le serveur
ps aux
  • Afficher les processus lancés par un utilisateur spécifique
ps -u root
ps -u apache2

La commande pidof

La commande pidof est plus adapté a l'utilisation dans un script car pidof retourne les PID d'un processus contrairement a la commande ps qui fait un instantané.

pidof apache2

Cet exemple donnera à l'écran quelque chose qui ressemble a ceci

15008 15006 15005 15004 15003 15001 10046 10044 10043 9997 9975

Ici nous constatons que Apache2 est lancé plusieurs fois, ce qui est normal. Un processus Apache2 est attribué à chaque visiteur.

Arrêt des processus

Il arrive, parfois, qu'on ai besoin d'arrêter un processus, voici 3 commandes spécialisées dans l'arrêt des processus.

  • La commande killall

killall permet de tuer tous les processus dont le nom de commande est connu

killall apache2
  • La commande kill

kill permet de tuer le processus dont on connait le PID.

kill -9 2731

On peut connaître le PID d'un processus grâce à la commande top ou htop.

  • La commande pkill

pkill permet d'arrêter tous les processus liés à un utilisateur spécifique.

pkill -u utilisateur

Vie des processus

  • Connaître quel port est écouté par quel processus

On va prendre comme exemple un cas pratique. J'ai rencontré lors d'un redémarrage serveur postfix qui ne voulait pas démarrer car un processus était déjà en route sur le port 25. J'avais ce message dans les logs

Mar  6 18:36:16 xxx postfix/master[4393]: fatal: bind 0.0.0.0 port 25: Address already in use

Pour savoir quel processus écoutait sur le port 25, et empêchait le redémarrage de postfix, j'ai utilisé cette commande :

lsof -i TCP:25

Ce qui m'a donné le message suivant :

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sendmail- 3169 root    4u  IPv4   6510      0t0  TCP ns1.chg-web.net:smtp (LISTEN)

Donc, il a suffit de "killer" le processus avec la commande kill pour pouvoir démarrer postfix.

Auteurs et sources