Boolean World

linux kill cover image

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 – toppspidof 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.

La commande supérieure affichant une liste de processus.

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.

Les résultats de la commande "ps aux"."ps aux" command.

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

Processus de filtrage avec ps et grep, avec un résultat positif.

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 :

avec ps et 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 psgrep 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.

La commande pidof

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.

La commande pgrep.

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 topps.

Tuer un processus

Il existe différentes commandes que vous pouvez utiliser pour tuer un processus — killkillallpkill 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 pgreppkill 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 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.