Maîtriser Linux Kill Process en utilisant ps, pgrep, pkill et plus encore

La gestion des processus sous Linux peut sembler intimidante pour un nouveau administrateur système (sysadmin) au début. Mais avec un peu d’explication et de démonstration, vous apprendrez comment trouver et exécuter des processus Linux n’est qu’une question d’utilisation des outils en ligne de commande tels que ps et kill.

Dans cet article, vous apprendrez les commandes pour localiser les processus en cours d’exécution et les processus errants, tuer (terminer) les processus en cours d’exécution, trouver les processus en arrière-plan, et bien plus encore sur n’importe quel système d’exploitation Linux.

À la fin de l’article, vous serez en mesure de gérer les processus en utilisant les numéros d’identification de processus (PID) à partir de la ligne de commande comme un pro Linux. Continuez à lire pour tout savoir sur les commandes de gestion des processus sous Linux!

Prérequis

Cet article va vous guider à travers la gestion des processus sous Linux. Si vous voulez mettre la main à la pâte, vous aurez besoin des éléments suivants:

  • A Linux host, which can be a virtual machine or a physical machine.
  • Pour essayer les exemples de PowerShell, installez PowerShell 7.1.1 sur un hôte Linux.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

Le choix de la distribution Linux que vous décidez d’utiliser vous appartient. Cet article sera basé sur Ubuntu 20.04 LTS. Cependant, les commandes sont standard pour le système d’exploitation Linux.

Prêt à commencer? Bien, plongeons-y.

Gestion des processus sous Linux

À l’occasion, vous pouvez rencontrer une situation où vous devez arrêter un processus en cours d’exécution sur un système Linux. Par exemple, vous pouvez avoir un script bash qui s’exécute selon un horaire. Ce script bash est configuré pour s’exécuter en tant qu’un autre utilisateur via une tâche cron (planificateur de processus Linux).

Parfois, ce script génère des processus errants qui peuvent entraîner l’échec du script. Comment tuer ces processus errants sans redémarrer le système ou arrêter le script?

Dans les prochaines sections, vous verrez les commandes utilisées pour localiser et terminer ou mettre fin à des processus sur un système Linux. Chaque section construira sur la précédente. Vous apprendrez les commandes ps, top, pgrep, kill, et pkill, toutes natives à Linux.

En bonus, les commandes équivalentes PowerShell Get-Process et Stop-Process sont incluses si les commandes natives Linux ne sont pas à votre goût.

Outils pour Localiser les Processus

Avant de tuer un processus, vous devez localiser le processus correct à cibler. L’identifiant PID unique permet un ciblage précis. Continuez à lire pour apprendre comment localiser les processus corrects à terminer.

Utilisation de la commande ps pour Afficher les Informations sur les Processus

Le État du processus ou la commande ps affiche des informations relatives aux processus actifs sur un système Linux. Vous pouvez localiser un processus en cours d’exécution et même des processus en arrière-plan avec ps.

La commande ps affichera, par défaut, tous les processus pour l’identification de l’utilisateur effectif (EUID) de l’utilisateur actuel. En exécutant la commande ps, comme indiqué ci-dessous, vous obtiendrez tous les processus en cours d’exécution que votre utilisateur peut terminer.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

Recherche d’informations détaillées sur les processus en utilisant la commande top

Et si vous voulez trouver des informations constamment rafraîchissantes sur les processus en cours d’exécution et les mesures système, dans ce cas, vous pouvez utiliser la commande top. Contrairement à ps, la commande top met à jour les informations sur les processus à l’écran à intervalles réguliers.

Lorsque vous exécutez la commande top, vous verrez plus qu’un simple PID. Les détails du processus incluent les pourcentages CPU et mémoire, valeurs Nice (priorité de processus de planification CPU), et la priorité de processus (PR) définie par le noyau Linux.

Pour un administrateur système novice ou expérimenté, la commande top est souvent l’outil principal pour gérer les ressources système vitales et les processus. Comme le montre l’exemple ci-dessous, la sortie de la commande top affiche plus d’informations sur les processus que la commande ps, y compris les métriques système globales.

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htop est une variante améliorée de top qui comprend diverses améliorations, telles qu’une sortie terminal colorisée.

Supposons que vous souhaitiez inspecter la mémoire ou les ressources CPU consommées par un processus. Dans ce cas, vous pouvez utiliser l’option p de la commande top comme indiqué ci-dessous.

top -p 2113
The top command displaying information on only one PID, 2113.

Peut-être avez-vous besoin d’afficher tous les processus en cours d’exécution pour un nom d’utilisateur spécifique. La commande top propose l’option u pour afficher uniquement les processus d’un utilisateur spécifique. Comme illustré dans l’exemple ci-dessous, seuls les PID correspondant à l’ID utilisateur bkindle sont affichés.

top -u bkindle
The top command displaying only processes for the user bkindle.

Localisation des PID de processus spécifiques avec la commande pgrep

À l’origine une commande Solaris, pgrep a été porté pour une utilisation avec Linux. En combinant la puissance de recherche de la commande grep et la gestion des processus de ps, pgrep offre une flexibilité pour trouver le processus exact à cibler.

Bien que ps affiche plus d’informations, pgrep est conçu pour ne retourner que le PID des processus trouvés. pgrep aide à localiser le processus en utilisant les nombreux paramètres de recherche disponibles. Dans l’exemple suivant, pgrep est utilisé pour rechercher tout processus correspondant à vmtoolsd.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

De même, spécifiez un ID utilisateur avec l’interrupteur u pour récupérer uniquement les processus associés à cet utilisateur spécifique. Comme indiqué ci-dessous, seul un PID est renvoyé pour l’utilisateur bkindle et le processus vmtoolsd.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

Recherche des processus avec Get-Process de PowerShell sous Linux

Les commandes Linux classiques fonctionnent bien, mais saviez-vous que PowerShell peut également gérer les processus Linux? La cmdlet Get-Process fonctionne de manière similaire à la commande Linux ps et renvoie des informations sur les processus. Par exemple, peut-être que vous devez trouver tous les processus en cours d’exécution par l’utilisateur actuel, bkindle. Comme indiqué ci-dessous, trouvez tous les PIDs (étiquetés ID par Get-Process) de l’utilisateur bkindle.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

Connexe : Comment utiliser Where-Object de PowerShell pour filtrer toutes les choses

Après avoir appris à localiser différents processus, continuez à découvrir toutes les façons de terminer ou tuer un processus sous Linux !

Arrêt des processus avec les commandes Kill sous Linux

Dans les sections précédentes, vous avez appris comment localiser le PID du processus auquel vous voulez envoyer un signal de kill en utilisant les commandes natives Linux et PowerShell. Les sections suivantes expliqueront comment utiliser les programmes kill et pkill, ainsi que leurs signaux associés et les commutateurs en ligne de commande.

Signaux Linux et gestion des processus

Les signaux sont la méthode que Linux utilise pour communiquer avec les processus s’exécutant dans le système d’exploitation. Les trois signaux principaux que la commande kill utilise pour terminer les processus sont :

  • 1 (SIGHUP) – Termine les programmes interactifs et oblige les démons (services en arrière-plan) à relire les fichiers de configuration utilisés par le processus.
  • 9 (SIGKILL) – Force le processus à se terminer sans effectuer de tâches de fermeture en douceur.
  • 15 (SIGTERM) – Permet à un processus de se terminer en douceur, tel que la fermeture des fichiers ouverts lorsqu’il est terminé. C’est le signal par défaut utilisé lorsqu’aucun numéro n’est spécifié lors de l’utilisation de la commande kill.

Alors que cet article se concentre uniquement sur les trois principaux signaux utilisés pour tuer des processus, il existe un total de 64 signaux disponibles. Utilisez kill -l pour obtenir la liste des signaux et leur numéro correspondant.

Great video on understanding process signals

Maintenant que vous comprenez les trois principaux signaux utilisés pour terminer un processus, apprenez comment tuer un processus dans les sections suivantes.

Utilisation de la commande kill pour terminer un processus

Dans cet exemple suivant, vous utiliserez la commande kill. Faites semblant un instant que vous exécutez une instance de PowerShell, nommée pwsh, et que l’ID de processus attribué est 22687. Une façon de terminer ce processus est montrée ci-dessous.

  1. Utilisez pgrep pwsh pour déterminer l’ID de processus pour le processus pwsh, utilisé dans la commande kill.
  2. Utilisez la commande kill -s TERM 22687 pour terminer le processus pwsh de manière propre. La commande TERM est associée au signal 15 (SIGTERM) et est indiquée en utilisant le paramètre s de la commande kill.
  3. Utilisez votre choix entre top, ps ou pgrep pour vérifier que le PID n’est plus répertorié.

Voici un exemple du processus ci-dessus à partir d’un terminal bash Ubuntu 20.04 LTS.

Using kill and associated commands to terminate the pwsh process.

La commande killall va terminer tous les processus en fonction de leur nom au lieu du PID, ce qui peut rendre cette commande assez destructive si elle est utilisée négligemment. Si vous choisissez d’utiliser cette commande, utilisez cependant l’option i pour que la commande demande confirmation.

Terminer les processus par leur nom avec la commande pkill

Vous avez peut-être remarqué que la commande kill ne fonctionne qu’avec les identifiants de processus. Cela peut rendre la terminaison d’un processus un processus complexe en plusieurs étapes. La commande pkill , incluse dans les paquets procps et procps-ng, termine un processus en fonction de son nom recherché.

Fonctionnellement, la commande pkill agit comme un enrobage autour du programme pgrep. La commande pkill envoie un signal spécifié à chaque processus trouvé au lieu de simplement répertorier les PIDs dans le terminal. pkill diffère de la commande kill en ce que pkill peut uniquement utiliser le nom d’un processus, et non le PID.

La commande pkill n’est pas disponible par défaut dans Ubuntu 20.04 LTS. Vous devrez télécharger et installer l’application. Pour ce faire, exécutez sudo apt install mcollective-plugins-process -y.

Pour tuer un processus avec la commande pkill, suivez les étapes suivantes:

  1. Utilisez ps pour vérifier si l’application nano (un éditeur de texte en ligne de commande) est actuellement en cours d’exécution. Cette étape est facultative, mais elle constitue une vérification de sécurité avant de tuer un processus.
  2. Utilisez pkill -9 nano pour terminer de force l’application nano.

Voici un exemple du processus ci-dessus à partir d’un terminal bash Ubuntu 20.04 LTS.

Using the pkill command to forcefully terminate the nano process.

Tuer un processus avec la commande Top

Lorsque vous exécutez la commande top pour voir les processus en cours d’exécution, vous pouvez tuer un processus donné avec la touche k. Vous verrez une invite interactive demandant le PID d’un processus à tuer.

Comme illustré ci-dessous, exécutez la commande top et appuyez sur k. Entrez le PID que vous souhaitez tuer et appuyez sur la touche Entrée pour terminer immédiatement le PID.

Use top to specify a process to terminate using the k keystroke.

Ensuite, apprenez une alternative de plus aux commandes natives de Linux en utilisant la commande PowerShell Stop-Process!

Utilisation de la commande Stop-Process de PowerShell pour terminer un processus

Si les commandes natives de Linux ne sont pas votre style, PowerShell a ce qu’il vous faut ! Tout comme avec la commande kill, vous pouvez terminer des processus en utilisant la Stop-Process cmdlet sous Linux. Encore une fois, faites comme si vous exécutiez un processus PowerShell pwsh.

  1. Trouvez le PID avec Get-Process -ProcessName 'pwsh' et notez les PIDs à terminer.
  2. Utilisez Stop-Process -Id 29992,30014 pour terminer les processus multiples renvoyés.
  3. Utilisez Get-Process -ProcessName 'pwsh' et vérifiez les PIDs, 29992 et 30014 ne sont plus répertoriés, ce qui signifie qu’ils ont été terminés.

Vous pouvez également utiliser Get-Process et la méthode kill pour terminer un ou plusieurs processus : (Get-Process -Id [PID]).Kill() ou (Get-Process -Id [PID1,2,3,4]).Kill().

Exercez la prudence lors de l’utilisation du paramètre ProcessName. L’utilisation de ce paramètre se comporte de manière similaire à la commande killall, et va terminer tous les processus correspondant aux noms fournis.

Voici un exemple du processus ci-dessus à partir d’un terminal bash Ubuntu 20.04 LTS.

Using PowerShell, Stop-Process to kill processes in Linux.

Étapes suivantes

Vous devriez maintenant savoir les nombreuses façons de trouver et terminer les processus sous Linux ! Pour votre prochain défi, essayez d’arrêter des processus à distance en utilisant des connexions SSH ou en tuant des processus qui pourraient s’exécuter dans des conteneurs.

Connexe : Un utilisateur Windows dans un monde Linux : Configuration de SSH sous Linux

Source:
https://adamtheautomator.com/linux-kill-process/