Comment tuer les processus du terminal Linux

Tuer un processus est parfois le seul moyen de s'en débarrasser. Malgré son nom dur, "tuer" un processus signifie simplement "le forcer à quitter". Voici comment procéder depuis la ligne de commande Linux ou macOS.

Qu'est-ce qu'un processus?

Des programmes tels que votre navigateur Web, les processus en arrière-plan associés à votre environnement de bureau et les services système Linux sont tous des processus.

Vous pouvez regrouper les processus en deux groupes:

  • Foreground processes are ones that have been started or launched by a user. They may be in a terminal window, or they may be a graphical application.
  • Background processes are all of the processes that are started automatically and don’t have any interaction with users. They don’t expect input from users nor do they present results or output to them. Background processes are things like services and daemons.

Si les processus de premier plan concernent le personnel du théâtre et les acteurs, les processus d'arrière-plan constituent l'équipe «d'arrière-scène» des coulisses.

Lorsque les processus se comportent mal ou fonctionnent mal, ils peuvent accumuler trop de temps CPU, consommer de la mémoire RAM ou entrer dans une boucle de calcul serrée et ne plus répondre. Les applications graphiques peuvent refuser de répondre aux clics de souris. Les applications de terminal peuvent ne jamais vous renvoyer à l'invite de commande.

La réponse humaine

"Tuer" un processus signifie simplement "forcer le processus à quitter". Cela peut être nécessaire si le processus refuse de répondre.

Linux fournit les commandes kill , pkill et killall pour vous permettre de le faire. Ces commandes peuvent être utilisées avec tout type de processus, graphique ou ligne de commande, avant-plan ou arrière-plan.

La commande kill

Pour utiliser kill , vous devez connaître l'ID de processus (PID) du processus que vous souhaitez terminer. La commande ps peut être utilisée pour trouver le PID d'un processus.

Pour que ps effectue une recherche dans tous les processus, utilisez l’option -e (tous les processus). Il est conseillé de transférer la sortie via less , il y en aura beaucoup. Tapez ps , un espace, -e , un espace, | (un caractère de canal), un autre espace, puis tapez less . Appuyez sur Entrée pour exécuter la commande.

ps -e | less

Cela vous donnera une liste de processus qui ressemble à la capture d'écran ci-dessous. Vous pouvez rechercher en avant dans moins en utilisant la touche / et vous pouvez effectuer une recherche en arrière en utilisant la touche ? .

Pour revenir au processus qui vous intéresse, dirigez la sortie de ps à grep et spécifiez le nom - ou une partie du nom - du processus.

ps -e | grep shutter

Une fois que vous avez localisé le PID du processus que vous souhaitez terminer, transmettez-le à la commande kill en tant que paramètre. Pour mettre fin au processus shutter identifié par la commande précédente, utilisez cette commande:

kill 2099

La commande kill est un assassin silencieux. Elle ne vous donne aucune information en cas de succès.

La commande pkill

La commande pkill vous permet de tuer un ou plusieurs processus par leur nom. Vous n'avez pas besoin d'identifier le processus par PID. Pour utiliser pkill , vous fournissez un terme de recherche que pkill utilise pour vérifier la liste des processus en cours d'exécution. Les processus de correspondance sont terminés. Vous devez donc vous assurer que le terme de recherche a été orthographié correctement.

En tant que filet de sécurité, vous pouvez utiliser la commande pgrep avant d'utiliser la commande pkill . La commande pgrep accepte également un terme de recherche. Il listera le PID de chaque processus qui correspond au terme recherché. Ceci est sûr car pgrep n'enverra aucun signal d'interruption aux processus, et si vous tapez le terme recherché, vous ne pourrez pas tuer un autre processus par erreur. Vous pouvez vous assurer que le terme de recherche est correctement pensé avant de le transmettre à pkill . pkill et pgrep traitent le terme de recherche de la même manière. Leur traitement est si similaire qu’ils partagent la même page de manuel.

Supposons qu’il existe un processus avec “subq” dans son nom. Nous allons utiliser le ps -u dave | grep pour avoir un aperçu du rideau. Vous pouvez voir que «subq» correspondra à ce processus et à ce processus seul. C'était juste pour que vous puissiez voir le nom complet du processus.

ps -u dave | grep subq

Supposons que notre utilisateur n’a pas fait cela; tout ce qu'ils savent, c'est que le nom du processus contient la sous-chaîne «subq». Ils utilisent pgrep pour vérifier qu'il n'existe qu'une seule correspondance avec le terme recherché. Ils utilisent ensuite ce terme de recherche avec pkill .

pgrep subq
pkill subq

Vous pouvez utiliser pkill pour tuer plusieurs processus à la fois. Ici, l'utilisateur exécute pgrep pour vérifier le nombre de processus lancés par Chrome. Ils utilisent pkill pour tous les tuer. Ils vérifient ensuite avec pgrep qu'ils ont tous été supprimés.

pgrep chrome
pkill chrome
pgrep chrome

Si plusieurs processus portant le même nom sont en cours d'exécution, mais que vous ne voulez pas tous les tuer, vous pouvez utiliser pgrep avec l'option -f (ligne de commande) processus est qui. Un exemple simple serait deux processus ping . Vous voulez tuer l'un d'eux mais pas l'autre. Vous pouvez utiliser leurs lignes de commande pour les distinguer. Notez l'utilisation de guillemets pour envelopper le paramètre de ligne de commande.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

La commande killall

Avertissement : sous les systèmes d'exploitation Solaris et OpenIndiana, la commande killall va tuer tous les processus vous appartenant . Si vous êtes root ou si vous avez publié sudo killall , vous allez redémarrer votre ordinateur! Lors de la recherche de cet article, ce problème a été confirmé avec la dernière version de OpenIndiana Hipster 2018.10.

La commande killall fonctionne de la même manière que la commande pkill mais avec une différence spécifique. Au lieu de passer un terme de recherche à la commande, vous devez fournir le nom exact du processus.

Vous ne pouvez pas fournir de correspondance partielle à un nom de processus; vous devez fournir le nom complet du processus, comme indiqué:

killall shutt
killall shutter

L'option -y (plus jeune que) vous permet de supprimer les processus en cours d'exécution depuis moins qu'une période spécifiée. La période est donnée en chiffres suivis d'une de ces unités:

  • s (seconds)
  • m (minutes)
  • h (hours)
  • d (days)
  • w (weeks)
  • M (months, note, capital “M”)
  • y (years)

Pour tuer un processus appelé ana qui vient d'être lancé et laisser les anciennes instances de ana en cours, vous pouvez utiliser les paramètres suivants avec killall si vous aviez réagi dans les deux minutes:

killall -y 2m ana

L'option -o (antérieure à) vous permet de supprimer les processus en cours d'exécution depuis plus longtemps qu'une période spécifiée. Cette commande supprimera toutes les connexions ssh en cours d'exécution depuis plus d'un jour:

killall -o 1d sshd

Ne soyez pas trop heureux

Ces commandes vous permettront d'identifier et de terminer correctement les processus errants avec précision et sécurité.

Soyez toujours prudent. Tout d’abord, assurez-vous que le processus que vous êtes sur le point de tuer est bien celui que vous souhaitez. Deuxièmement, vérifiez deux fois - soyez prudent et assurez-vous que le processus ciblé est celui que vous souhaitez terminer. Terminez le processus une fois que vous êtes satisfait.