Tuer un processus sous Linux : kill, killall et pkill

3 commandes pour tuer un processus sous Linux

Imaginez un instant, vous avez passé une excellente journée à travailler sur votre machine Linux, et soudain, un processus commence à ralentir l’ensemble du système. Vous l’avez identifié et vous souhaitez arrêter son exécution, mais comment tuer un processus en ligne de commande sous Linux ?

Si le processus s’exécute au premier plan, vous pouvez utiliser le raccourci terminal « Ctrl+C » pour l’arrêter directement. Toutefois, si le processus n’est pas visible, car il s’exécute en arrière-plan, et que vous l’avez repéré après avoir exécuté la commande « top », par exemple, vous pouvez utiliser des commandes dédiées pour le « tuer ».

En fait, le terme « tuer un processus » fait référence à l’arrêt d’un processus en cours d’exécution. Si vous connaissez l’ID du processus (PID), vous pouvez utiliser la commande kill comme suit :

kill <signal> <PID>

Dans la syntaxe de la commande ci-dessus, le bloc « signal » fait référence au signal d’arrêt que vous souhaitez envoyer pour mettre fin au processus et le bloc « PID » fait référence à l’ID du processus.

Il existe d’autres commandes alternatives à la commande kill, donc dans cet article je vais évoquer plusieurs solutions pour tuer un processus, notamment avec la commande killall.

1. Les signaux dans Linux

Tout d’abord, commençons par regarder de plus près les signaux de fin de Linux. Lorsqu’un processus est terminé par le système d’exploitation ou par l’utilisateur, c’est-à-dire que le processus ne s’est pas terminé naturellement (tout seul), il reçoit un signal de fin de la part du système.

Voici les signaux disponibles :

  • SIGHUP – Signal Hangup

Envoyé à un processus lorsque le terminal qui le contrôle est fermé.

Associé à la valeur numérique « 1 ».

  • SIGINT – Signal Interrupt

Le signal envoyé à un processus lorsqu’un utilisateur met fin à un processus (par exemple, Ctrl + C)

Associé à la valeur numérique « 2 ».

  • SIGKILL – Signal Kill

Le signal qui quitte immédiatement un processus, sans lui permettre de sauvegarder son état actuel.

Associé à la valeur numérique « 9 ».

  • SIGTERM – Signal Terminate

Signal envoyé pour demander la fin du processus. Ce signal peut être ignoré par un processus, mais c’est la meilleure façon de mettre fin à un processus car il peut libérer les ressources lorsque le processus reçoit SIGTERM.

Associé à la valeur numérique « 15 ».

  • SIGSTOP – Signal Stop

Signal permettant d’arrêter un processus, mais devant être repris ultérieurement.

Associé à la valeur numérique « 19 » sur la majorité des machines, ou d’autres valeurs sur des machines spécifiques (17, 23 et 24).

Dans la pratique, il est fort probable que vous utilisiez les signaux 9 et 15. Avant de passer à l’utilisation des commandes, voyons comment obtenir le PID d’un processus.

2. Obtenir le PID d’un processus

Vous devez également connaître un minimum d’informations sur le processus que vous souhaitez tuer. Comment tuer un processus s’il n’est pas identifié avant ? Difficile, vous allez me dire, d’autant plus qu’avec la commande kill, vous devez fournir l’identifiant d’un processus (PID).

Vous pouvez obtenir le PID à partir du nom du processus :

pidof <nom du processus>

3. Tuer un processus dans la ligne de commande Linux

Voyons d’abord la commande kill car vous l’utiliserez plus que la commande killall, qui reste intéressante malgré tout.

A. Utilisation de la commande kill

La commande kill nécessite que vous connaissiez l’ID d’un processus que vous voulez tuer et, éventuellement, le signal de fin.

Pour tuer un processus simplement, utilisez la syntaxe suivante :

kill <signal> <PID>

L’envoi d’un signal de fin à un PID est facultatif, et si aucun signal n’est fourni, kill envoie par défaut SIGTERM (15). Autrement dit, on peut utiliser cette syntaxe :

kill <PID>

Prenons un exemple… J’ai lancé un processus en arrière-plan avec la commande sleep afin d’attendre 120 secondes, et en l’exécutant en tâche de fond ce qui va permettre d’avoir le PID (&). Nous allons essayer de tuer ce processus.

sleep 120 &
[1] 46532

Compte tenu du retour de la commande ci-dessus, je sais que mon processus dispose de l’ID « 46532 », donc pour le tuer, je dois faire :

kill 46532
Tuer un processus Linux avec la commande kill

Si je voulais utiliser un signal de fin spécifique pour mettre fin à ce processus, je pourrais utiliser soit la valeur numérique correspondante à ce signal, soit le nom du signal directement. Voici un exemple dans le même esprit que le précédent :

sleep 120 &
[1] 46532

Ce qui donne pour tuer le processus :

kill -SIGKILL 46532

Dans le cas où l’on utilise la valeur numérique, il faut utiliser cette syntaxe :

kill -9 46532

Ce n’est pas toujours utile de préciser un type de signal car par défaut, si vous ne précisez rien, la commande kill va utiliser SIGTERM (15).

B. Utilisation de la commande killall

Si vous ne savez pas quel est le PID d’un processus, ou si ledit processus a plusieurs processus enfants, et que vous voulez tuer les processus enfants et le processus parent en même temps, vous pouvez utiliser la commande killall. Elle s’utilise sur un principe similaire à la commande kill, la commande principale pour tuer un processus Linux :

killall <signal> <nom du processus>

Comme pour la commande kill, la spécification d’un signal de fin est facultative. Lorsqu’aucun signal de fin n’est spécifié, killall enverra SIGTERM (15) pour arrêter le processus en question, comme le fait la commande kill.

Reprenons le même exemple que précédemment basé sur « sleep », sauf que cette fois-ci je veux tuer deux commandes sleep en cours d’exécution.

$ sleep 60 &
[1] 46536
$ sleep 120 &
[2] 46537

Pour tuer ces deux processus « sleep » avec killall, cela donne :

$ killall sleep
[1]- Terminé sleep 60
[2]+ Terminé sleep 120

En image, voici ce que ça donne avec ce même exemple :

Linux tuer un processus avec killall

C. Utilisation de la commande pkill

Une commande alternative à kill est la commande pkill, capable aussi de tuer un processus Linux. En fait, il s’agit d’une sorte de combinaison des commandes pgrep et kill. La commande killall tue tous les processus qui ont un nom correspondant. D’un autre côté, pkill utilise le principe de correspondance via des patterns pour faire correspondre les processus et les tuer.

L’avantage de la commande pkill, c’est qu’elle de tuer un processus simplement avec son nom, à la place du PID.

Voici la syntaxe :

pkill <options> pattern

Quelques options utiles disponibles dans la commande pkill sont les suivantes :

  • -u : processus appartenant à un propriétaire particulier
  • -x : processus qui correspondent exactement au pattern
  • -signal : spécifier un signal de terminaison (par défaut SIGTERM)

Ce pattern peut être simplement le nom du processus, ce qui donnerait la commande ci-dessous, si l’on reprend l’exemple précédent.

pkill sleep

Puisque pkill repose sur le principe de correspondance, la commande ci-dessous tue également le processus « sleep » :

pkill slee

La commande pkill est intéressante, mais elle doit être utilisée avec précaution !

4. Conclusion

Avec cet article de la boîte à tutoriels informatique, vous avez appris 3 commandes différentes pour tuer un processus sous Linux. Personnellement, j’utilise surtout la commande « kill », ou éventuellement « killall ».

Ressources :

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *