Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Commande KILL – Comment tuer ou relancer un processus Linux ?

KILL KILL KILL !!!!

Loin de moi l’idée de lancer un appel au meurtre, mais s’il y a bien une commande Linux qui est très utile, mais totalement sous-cotée, c’est bien celle-ci.

Comparaison des formats d'image WebP, PNG et JPG pour l'enregistrement et la sauvegarde

En effet, si vous faites un peu de Linux ou même de macOS en ligne de commande, vous savez que lorsqu’un application ne répond plus, il faut la tuer. Et pour cela, quoi de mieux que la commande kill ?

Disponible dans tous les shells, kill peut se présenter comme une commande propre à Bash, Zsh…etc., mais peut aussi fonctionner sous la forme d’un binaire.

Pour savoir quelle version de kill vous avez sous la main, entrez la commande suivant dans ujn terminal

type -a kill

Cela vous renverra quelque chose comme ça :

kill is a shell builtin
kill is /bin/kill

Vous saurez alors quelle version de kill est appelée en priorité sur votre système. Sur le mien, c’est celui qui est inclus dans le shell. Du coup, si vous voulez appeler le binaire, il faudra utiliser le chemin complet, à savoir

/bin/kill

Ensuite, au niveau de la syntaxe, c’est plutôt simple :

 korben@machine ~ % /bin/kill
 usage: kill [-s signal_name] pid ...
        kill -l [exit_status]
        kill -signal_name pid ...
        kill -signal_number pid ... 

La commande kill se charge d’envoyer un signal de votre choix à un processus ou un groupe de processus désigné par un numéro.

Quand je parle de signal, je parle de cette liste que vous pouvez obtenir en tapant la commande

kill -l
  1. HUP
  2. INT
  3. QUIT
  4. ILL
  5. TRAP
  6. ABRT
  7. EMT
  8. FPE
  9. KILL
  10. BUS
  11. SEGV
  12. SYS
  13. PIPE
  14. ALRM
  15. TERM
  16. URG
  17. STOP
  18. TSTP
  19. CONT
  20. CHLD
  21. TTIN
  22. TTOU
  23. IO
  24. XCPU
  25. XFSZ
  26. VTALRM
  27. PROF
  28. WINCH
  29. INFO
  30. USR1
  31. USR2

Ça en fait une sacrée tartine, mais les gens normaux utiliseront uniquement ces 3 là qui sont les plus courants :

1 - HUP qui permet de recharger un process
9 - KILL qui permet de tuer un process
15 - TERM qui permet de terminer proprement un process

Vous pouvez alors préciser la nature d’un signal de différentes façons :

Soit en utilisant son numéro suivi de l’identifiant du processus (PID_NUMBER)…

kill -1 PID_NUMBER

ou

kill -s 1 PID_NUMBER

Soit en utilisant le préfixe SIG

kill -SIGHUP PID_NUMBER

ou

kill -s SIGHUP PID_NUMBER

Soit simplement sans le préfixe SIG comme ceci :

kill -HUP PID_NUMBER

ou

kill -s HUP PID_NUMBER

Toutes ces commandes sont équivalentes. À vous de voir celles que vous préférez.

Concernant le PID_NUMBER, si celui-ci est supérieur à 0, le signal est envoyé au processus ayant le PID_NUMBER correspondant. Si le PID_NUMBER est égal à 0, le signal est envoyé à l’ensemble des process du groupe dans lequel vous êtes. Par exemple, vous ouvrez un nouveau shell. Celui-ci à son propre GID (Global ID). En entrant un PID_NUMBER = 0 lors d’un kill, vous agirez sur l’ensemble des process rattachés au GID de votre Shell. Pour connaitre les GIDs en cours sur votre système, vous pouvez utiliser la commande suivant et observer la colonne PGID :

ps -efj

Si le PID_NUMBER est égal à -1, le signal sera envoyé à tous les process ayant le même UID (User ID). Donc si vous êtes root, ce signal sera envoyé à tous les process lancés par root à l’exception de la commande kill et de init.

Si le PID_NUMBER est inférieur à -1, le signal sera envoyé à tous les process présents dans le groupe (GID) ayant cette valeur.

Tout cela est pratique quand on veut tuer ses propres processus, mais aussi lorsqu’on est root et qu’on veut agir sur les processus d’autres utilisateurs du système.

Maintenant pour mettre fin à la vie délicate d’un processus, il faut que vous déterminiez le PID_NUMBER du processus en question.

Pour cela, vous pouvez utiliser au choix les commandes pgrep, pidof, ps ou encore top.

Par exemple, pour déterminer le PID_NUMBER de Firefox, faites un

pidof firefox

Vous récupérerez alors une liste d’ID que vous pourrez tous terminer d’un coup comme ceci :

kill -9 PID_NUMBER1 PID_NUMBER2 PID_NUMBER3

Et ainsi de suite…

Vous pouvez aussi réduire ces 2 étapes en 1 seule en faisant comme ceci :

kill -9 $(pidof firefox)

Ça c’était pour killer des trucs. Maintenant si vous voulez ressusciter des processus, il va falloir leur envoyer le signal HUP pour lui indiquer que vous voulez qu’il se recharge.

Par exemple, pour relancer nginx, vous devez d’abord récupérer son PID_NUMBER comme ceci

cat /var/run/nginx.pid

Puis envoyer le signal HUP (1) comme ceci en remplaçant PID_NUMBER par le numéro du processus Nginx :

sudo kill -1 PID_NUMBER

Voilà pour le petit tour d’horizon de la commande kill. J’espère que cela vous aura éclairé sur son fonctionnement.


Les articles du moment