Dans un système d’exploitation, il existe de nombreux programmes, qui peuvent être exécutés par un utilisateur ou par le SYSTÈME d’exploitation lui-même (tels que les services système). De tels programmes qui s’exécutent sur le système sont appelés « processus”. Habituellement, un processus se termine tout seul lorsqu’ils ont terminé leur tâche, ou lorsque vous leur demandez de quitter en appuyant sur un raccourci clavier ou en cliquant sur le bouton « Fermer”.
Cependant, un processus peut parfois raccrocher ou consommer beaucoup de CPU ou de RAM. Dans cette situation, vous voudriez « tuer » manuellement le processus. Dans cet article, nous examinerons divers outils que vous pouvez utiliser pour tuer des processus sur un système Linux.
Localisation du processus à tuer
Pour tuer un processus, vous devez d’abord localiser les détails du processus. Vous pouvez le faire via trois commandes – top
ps
pidof
et pgrep
. Selon la situation, vous pouvez utiliser l’une de ces commandes à cette fin.
Comme nous le verrons plus loin dans cet article, vous pouvez tuer un processus par son nom ou son ID de processus (PID). Le PID est un nombre qui identifie de manière unique un processus. Tuer par l’ID de processus est utile lorsque vous souhaitez tuer uniquement un processus spécifique. D’un autre côté, tuer par le nom du processus est utile lorsque vous souhaitez tuer toutes les instances en cours d’exécution d’un programme particulier.
Localisant le processus avec la commande top
Nous examinerons d’abord la commande top
. Lancez la commande top en tapant:
top
Vous obtiendrez une interface interactive, comme indiqué ci-dessous. Vous pouvez parcourir cette liste pour trouver le nom ou le PID du processus que vous souhaitez tuer.
Pour parcourir cette liste, vous pouvez utiliser les touches haut/bas. De plus, la commande top a également des moyens de filtrer les processus par utilisation du PROCESSEUR, noms d’utilisateur et de processus, que vous pouvez lire dans ce guide.
La colonne la plus à gauche contient le PID du processus et le côté droit contient le nom du programme. Par exemple, dans la capture d’écran ci-dessus, nous avons le processus vnstatd
qui s’exécute avec un ID de processus de 263.
Localiser le processus avec les commandes ps et grep
Une autre façon d’obtenir une liste de processus consiste à exécuter:
ps aux
Dans la commande ci-dessus, nous avons utilisé les drapeaux aux
qui ont les significations suivantes:
-
a
: Affiche les processus pour tous les utilisateurs -
u
: Affiche l’utilisateur qui utilise le processus -
x
: Affiche tous les processus. (Sans cela,ps
n’affichera pas les processus s’exécutant dans un environnement graphique.)
La sortie de la commande est similaire à celle de top
. Le PID est disponible dans la deuxième colonne de gauche et le nom du processus est disponible dans la colonne la plus à droite.
L’avantage d’utiliser ps
est que vous pouvez facilement filtrer cette liste avec la commande grep
. Par exemple, pour trouver un processus associé au terme « vnstat », vous pouvez utiliser :
ps aux | grep -i vnstat
Ici, nous avons obtenu deux résultats — le processus vnstatd
, ainsi que le processus grep
. Comme nous recherchions toutes les instances du terme « vnstat » et que nous exécutions également grep
avec ”vnstat » comme argument, nous avons également grep
dans les résultats.
Ainsi, même lorsqu’il n’y a pas de processus liés à « vnstat” en cours d’exécution, nous obtiendrions une entrée montrant le processus de filtrage grep
:
Donc, même si nous avons obtenu un résultat, il n’y a aucun processus qui nous intéresse.
Trouver le PID avec pidof et pgrep
La combinaison top
et ps
grep
nous permet de rechercher des processus. D’autre part, si vous connaissez le nom exact d’un processus, vous pouvez utiliser pidof
pour trouver son PID.
Utiliser pidof
est assez simple. Pour obtenir les PID d’un processus avec le nom exact de « nginx », utilisez :
pidof nginx
S’il existe des processus avec le nom exact de ”nginx », vous obtiendrez une liste de PID, comme indiqué ci-dessous. S’il n’y en a pas, vous n’obtiendrez rien comme sortie.
Si vous ne connaissez pas le nom complet, vous pouvez utiliser pgrep
au lieu de pidof
. Par exemple, pour rechercher tous les processus qui contiennent « ngin” quelque part dans leur nom, exécutez :
pgrep ngin
Cela correspondra aux processus avec le nom exact de « nginx”, ainsi qu’à tout autre processus qui correspond aux mêmes critères. Pour notre système, notez que nous obtenons tous les PID appartenant à ”nginx » dans la capture d’écran ci-dessus.
Les commandes pidof
et pkill
vous donnent beaucoup moins d’informations. Comme nous le verrons dans la section suivante, il y a certaines circonstances dans lesquelles vous ne pouvez pas tuer un processus. La sortie de top
et ps
contient des informations supplémentaires qui vous aident à déterminer si vous pouvez vraiment tuer un processus.
Quels processus pouvez-vous tuer?
Maintenant que nous avons localisé le processus, il est temps de le tuer. Cependant, avant d’apprendre à le faire, il y a quelques choses que vous devez savoir.
Si vous êtes un utilisateur normal, vous pouvez tuer vos propres processus, mais pas ceux qui appartiennent à d’autres utilisateurs. top
et ps
indiquent tous deux l’utilisateur sous lequel un processus est en cours d’exécution. Dans le cas de top
, la deuxième colonne contient le nom d’utilisateur. Avec ps aux
, la première colonne contient le nom d’utilisateur.
Cependant, un utilisateur root peut tuer tous les processus. Vous pouvez soit ajouter sudo
avant toute commande pour l’exécuter en tant que root, soit obtenir un shell root en tapant su
, puis exécuter la commande.
Sous Linux, lorsqu’un processus est tué, un » signal de fin » est délivré au processus. Bien qu’il existe de nombreux types de signaux différents, nous traitons principalement les signaux « SIGTERM” et « SIGKILL”. Ils ont une valeur numérique de 15 et 9 respectivement. Par défaut, toutes les commandes de suppression de processus utilisent « SIGTERM », ce qui permet au programme d’exécuter du code avant sa sortie, lui permettant ainsi de se terminer ”gracieusement ». Si vous souhaitez mettre fin au processus de force, vous pouvez utiliser « SIGKILL” à la place.
Le noyau Linux conserve certaines informations relatives à l’état d’un processus. Lorsqu’un processus se termine, le noyau doit conserver les informations, afin que le processus parent puisse savoir si le processus enfant a pu accomplir ses tâches et s’il s’est terminé seul ou s’il a été tué. Tant que le parent ne l’a pas fait, ces processus « zombies” apparaîtront dans la liste des processus. Vous ne pouvez pas tuer un tel processus car il ne s’agit que d’une entrée dans la liste de tous les processus, et aucun processus réel n’y est associé.
Lorsqu’un processus effectue des opérations d’entrée/ sortie (telles que la lecture ou l’écriture sur des disques), il est dit en état de ”veille ininterrompue ». Vous ne pouvez pas tuer un processus alors qu’il est dans cet état.
Vous pouvez savoir si un processus est dans l’état ”zombie » (Z) ou ”sommeil non interruptible » (D) en regardant la 8ème colonne de la sortie top
ps
.
Tuer un processus
Il existe différentes commandes que vous pouvez utiliser pour tuer un processus — kill
killall
pkill
et top
. Nous allons commencer par le plus simple : la commande killall
.
Tuer des processus avec la commande killall
La commande killall
est l’un des moyens les plus simples de tuer un processus. Si vous connaissez le nom exact d’un processus et que vous savez qu’il ne fonctionne pas en tant qu’autre utilisateur et qu’il n’est pas dans les états Z ou D, vous pouvez utiliser cette commande directement; il n’est pas nécessaire de localiser manuellement le processus comme nous l’avons décrit ci-dessus.
Par défaut, Par exemple, pour tuer un processus nommé « firefox”, exécutez :
killall firefox
Pour tuer de force le processus avec SIGKILL, exécutez:
killall -9 firefox
Vous pouvez également utiliser -SIGKILL
au lieu de -9
.
Si vous voulez tuer des processus de manière interactive, vous pouvez utiliser -i
Comme ceci :
killall -i firefox
Si vous voulez tuer un processus s’exécutant en tant qu’utilisateur différent, vous pouvez utiliser sudo
:
sudo killall firefox
Vous pouvez également tuer un processus en cours d’exécution depuis un certain temps avec les drapeaux -o
et -y
. Donc, si vous voulez tuer un processus qui s’exécute depuis plus de 30 minutes, utilisez :
killall -o 30m <process-name>
Si vous voulez tuer un processus qui s’exécute depuis moins de 30 minutes, utilisez :
killall -y 30m <process-name>
De même, utilisez les abréviations suivantes pour les unités de temps respectives:
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months |
y | years |
Killing processes with the pkill command
Sometimes, you only know part of a program’s name. Tout comme pgrep
pkill
vous permet de tuer des processus basés sur des correspondances partielles. Par exemple, si vous souhaitez tuer tous les processus contenant le nom apache
dans le nom, exécutez :
pkill apache
Si vous souhaitez utiliser un SIGKILL au lieu d’un SIGTERM, utilisez :
pkill -9 apache
Vous pouvez également utiliser
-SIGKILL
au lieu de -9
.
Tuer des processus avec la commande kill
Utiliser la commande kill est simple. Une fois que vous avez trouvé le PID du processus que vous souhaitez tuer, vous pouvez le terminer à l’aide de la commande kill
. Par exemple, si vous souhaitez tuer un processus ayant un PID de 1234, utilisez la commande suivante :
kill 1234
Comme nous l’avons mentionné précédemment, la valeur par défaut est d’utiliser un SIGTERM. Pour utiliser un SIGKILL, utilisez -9
ou -SIGKILL
comme nous l’avons vu précédemment :
kill -9 1234
Tuer des processus avec la commande top
Il est très facile de tuer des processus en utilisant le . Tout d’abord, recherchez le processus que vous souhaitez tuer et notez le PID. Ensuite, appuyez sur k
pendant que top est en cours d’exécution (ceci est sensible à la casse). Il vous invitera à entrer le PID du processus que vous souhaitez tuer.
Après avoir entré le PID, appuyez sur entrée. Maintenant, il vous demandera quel signal vous souhaitez utiliser pour tuer le processus. Si vous souhaitez utiliser SIGTERM(15), appuyez simplement sur entrée car c’est le signal par défaut. Si vous souhaitez utiliser SIGKILL(9), tapez 9 et appuyez sur entrée.
Si vous laissez l’ID de processus vide et appuyez directement sur Entrée, cela mettra fin au processus le plus haut de la liste. Vous pouvez faire défiler à l’aide des touches fléchées et modifier le processus que vous souhaitez tuer de cette manière.
Conclusion
Dans cet article, nous avons vu les différentes façons de tuer les processus sous Linux. L’apprentissage de ces commandes est essentiel pour une administration et une gestion correctes du système. Si vous souhaitez explorer davantage ces commandes, jetez un œil à leurs pages de manuel respectives.
Si vous avez aimé ce post, veuillez le partager 🙂