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.
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
- HUP
- INT
- QUIT
- ILL
- TRAP
- ABRT
- EMT
- FPE
- KILL
- BUS
- SEGV
- SYS
- PIPE
- ALRM
- TERM
- URG
- STOP
- TSTP
- CONT
- CHLD
- TTIN
- TTOU
- IO
- XCPU
- XFSZ
- VTALRM
- PROF
- WINCH
- INFO
- USR1
- 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<br></br>9 - KILL qui permet de tuer un process<br></br>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.