GNU/Linux >> Tutoriels Linux >  >> Linux

Maîtriser le processus Linux Kill à l'aide de ps, pgrep, pkill et plus

La gestion des processus sous Linux peut sembler décourageante pour un nouvel administrateur système (sysadmin) au premier abord. Mais avec une petite explication et une démonstration, vous apprendrez comment trouver et exécuter les processus de mise à mort Linux en utilisant simplement des outils de ligne de commande tels que ps et kill .

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

À la fin de l'article, vous gérerez des processus basés sur des 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 de processus sous Linux !

Prérequis

Cet article va être une présentation de la façon de gérer les processus sous Linux. Si vous voulez être pratique, vous aurez besoin des éléments suivants :

  • Un hôte Linux, qui peut être une machine virtuelle ou une machine physique.
  • Pour essayer les exemples PowerShell, installez PowerShell 7.1.1 sur un hôte Linux.
  • Un compte utilisateur non root. Bien que l'accès root ne soit pas requis, il y aura un exemple où l'utilisateur root peut tuer le processus en cours d'exécution d'un autre utilisateur.

La distribution de Linux que vous choisissez d'utiliser dépend de vous. 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, allons-y.

Gestion des processus sous Linux

À l'occasion, vous pouvez rencontrer un scénario dans lequel 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 calendrier. Ce script bash est configuré pour s'exécuter en tant qu'autre utilisateur via un cron travail (planificateur de processus Linux).

Parfois, ce script génère des processus errants qui peuvent faire échouer le script. Comment tuer ces processus errants sans redémarrer le système ni arrêter le script ?

Dans les sections suivantes, vous passerez en revue les commandes utilisées pour localiser et terminer ou tuer processus sur un système Linux. Chaque section s'appuiera sur la précédente. Vous en apprendrez plus sur ps , top , pgrep , kill , et pkill commandes toutes natives de Linux.

En bonus, les commandes équivalentes PowerShell Get-Process et Stop-Process sont inclus si les commandes natives Linux ne vous conviennent pas.

Outils de localisation des processus

Avant de tuer un processus, vous devez localiser le bon processus à cibler. Le PID unique permet un ciblage précis. Lisez la suite pour savoir comment localiser les bons processus de résiliation.

Utilisation du ps Commande pour afficher les informations de processus

Le statut du processus ou ps La commande 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 d'arrière-plan avec ps .

La commande ps affichera par défaut tous les processus pour l'identification effective de l'utilisateur (EUID) de l'utilisateur actuel. Exécution du ps , comme indiqué ci-dessous, renverra tous les processus en cours que votre utilisateur peut terminer.

ps

Rechercher des informations de processus étendues à l'aide du top Commande

Et si vous voulez trouver des informations constamment actualisées sur les processus en cours d'exécution et les métriques système, dans ce cas, vous pouvez utiliser le top commande. Contrairement à ps , le top La commande met à jour les informations de processus à l'écran sur un intervalle défini.

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

Pour un administrateur système nouveau ou expérimenté, le top La commande est souvent le principal outil de gestion des ressources et des processus système vitaux. Comme indiqué ci-dessous, le top la sortie de la commande affiche plus d'informations sur le processus que le ps commande, y compris les métriques globales du système.

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

Supposons que vous souhaitiez inspecter la mémoire ou les ressources CPU qu'un processus consomme. Dans ce cas, vous pouvez utiliser le p commutateur de top comme indiqué ci-dessous.

top -p 2113

Peut-être avez-vous besoin d'afficher tous les processus en cours d'exécution pour un nom d'utilisateur spécifique. Le top la commande offre le u basculer pour afficher uniquement les processus d'un utilisateur spécifique. Comme le montre l'exemple ci-dessous, les PID correspondant uniquement à l'ID utilisateur bkindle sont affichés.

top -u bkindle

Localisation des PID de processus spécifiques avec le pgrep Commande

A l'origine une commande Solaris, pgrep a été porté pour être utilisé avec Linux. Combiner la puissance de recherche du grep commande et la gestion des processus de ps , pgrep offre la flexibilité de trouver le processus exact à cibler.

Bien que ps affiche plus d'informations, pgrep est conçu pour renvoyer uniquement le PID des processus renvoyés. pgrep aide à localiser le processus en utilisant les nombreux paramètres de recherche disponibles . Dans l'exemple suivant, pgrep s'affiche à la recherche de tout processus correspondant à vmtoolsd .

pgrep vmtoolsd

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

pgrep -u bkindle vmtoolsd

Recherche de processus avec le Get-Process de PowerShell sous Linux

Les commandes Linux typiques fonctionnent très bien, mais saviez-vous que PowerShell est également capable de gérer les processus Linux ? Le Get-Process L'applet de commande fonctionne de la même manière que Linux ps commande et renvoie des informations sur le processus. Par exemple, vous devez peut-être rechercher tous les processus en cours d'exécution par l'utilisateur actuel, bkindle . Comme indiqué ci-dessous, recherchez tous les PID (identifiés par Get-Process ) de l'utilisateur bkindle .

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'

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

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

Tuer les processus à l'aide des commandes Kill sous Linux

Dans les sections précédentes, vous avez appris à localiser le PID du processus auquel vous souhaitez envoyer un signal d'arrêt à l'aide de commandes natives Linux et PowerShell. Les sections suivantes expliquent comment utiliser le kill et pkill programmes, ses signaux associés et les commutateurs de ligne de commande.

Gestion des signaux et des processus Linux

Les signaux sont la méthode utilisée par Linux pour communiquer avec les processus en cours d'exécution dans le système d'exploitation. Les trois principaux signaux que le kill la commande utilise pour terminer les processus sont :

  • 1 (SIGHUP) - Termine les programmes interactifs et oblige les démons (services d'arrière-plan) à relire les fichiers de configuration utilisés par le processus.
  • 9 (SIGKILL) - Force le processus à se fermer sans effectuer de tâches d'arrêt en douceur.
  • 15 (SIGTERM) - Permet à un processus de se terminer normalement, comme la fermeture des fichiers ouverts une fois terminé. Il s'agit du signal par défaut utilisé lorsqu'aucun nombre n'est spécifié lors de l'utilisation de la commande kill.

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

Maintenant que vous comprenez les trois principaux signaux utilisés pour mettre fin à un processus, découvrez comment arrêter un processus dans les sections suivantes.

Utilisation du kill Commande pour terminer un processus

Dans cet exemple suivant, vous utiliserez le kill commande. Imaginez un instant que vous exécutez une instance PowerShell, nommée pwsh , et le PID attribué est 22687. Une façon de mettre fin à ce processus est illustrée ci-dessous.

  1. Utilisez pgrep pwsh pour déterminer le PID du processus pwsh , utilisé dans le kill commande.
  2. Utilisez kill -s TERM 22687 pour terminer le pwsh traiter avec grâce. Le TERM la commande correspond au signal 15 (SIGTERM) et indiquée à l'aide du s paramètre du kill commande.
  3. Utilisez votre choix de top , ps , ou pgrep pour vérifier que le PID n'est plus répertorié.

Vous trouverez ci-dessous un exemple du processus ci-dessus à partir d'un terminal bash Ubuntu 20.04 LTS.

Le killall La commande mettra fin à tous les processus basés sur un nom au lieu de PID, ce qui peut rendre cette commande assez destructrice si elle est utilisée avec négligence. Si vous choisissez d'utiliser cette commande, utilisez le i option pour que la commande demande une confirmation.

Tuer les processus par nom avec pkill

Vous avez peut-être remarqué que le kill La commande ne fonctionne qu'avec les ID de processus. Cela peut faire de la fin d'un processus un processus complexe en plusieurs étapes. Le pkill commande, incluse dans procps et procps-ng packages, termine un processus basé sur un nom recherché.

Fonctionnellement, le pkill commande agit comme un wrapper autour du pgrep programme. Le pkill La commande envoie un signal spécifié à chaque processus trouvé au lieu de répertorier uniquement les PID dans le terminal. pkill diffère de kill dans ce pkill ne peut utiliser que le nom d'un processus, pas le PID.

Le pkill La commande 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 en utilisant pkill , procédez comme suit :

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

Vous trouverez ci-dessous un exemple du processus ci-dessus à partir d'un terminal bash Ubuntu 20.04 LTS.

Tuer un processus avec le Top Commande

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

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

Ensuite, découvrez une autre alternative aux commandes Linux natives à l'aide de PowerShell Stop-Process commande !

Utilisation du PowerShell Stop-Process Commande pour terminer un processus

Si les commandes natives Linux ne sont pas votre style, PowerShell vous couvre ! Tout comme avec le kill commande, vous pouvez mettre fin aux processus à l'aide de la Stop-Process applet de commande sous Linux. Encore une fois, faites comme si vous exécutiez un PowerShell pwsh processus.

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

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

Soyez prudent lorsque vous utilisez le ProcessName paramètre. L'utilisation de ce paramètre se comporte comme le killall commande, et va tuer tous les processus correspondant au(x) nom(s) fourni(s).

Vous trouverez ci-dessous un exemple du processus ci-dessus à partir d'un terminal bash Ubuntu 20.04 LTS.

Étapes suivantes

Vous devriez maintenant connaître les nombreuses façons de trouver et de terminer des processus sous Linux ! Pour votre prochain défi, essayez de tuer les processus à distance à l'aide de connexions SSH ou en tuant les processus qui peuvent s'exécuter dans des conteneurs.

Connexe :Un gars de Windows dans un monde Linux :Configurer SSH sous Linux


Linux
  1. Comment trouver et tuer le processus Zombie sous Linux

  2. La différence entre Kill, Pkill et Killall ?

  3. Comment tuer un processus sous Linux en utilisant la commande ?

  4. Linux :trouver et tuer les processus zombies

  5. Comment tuer tous les processus renvoyés par pgrep

Comment tuer les processus Zombie sous Linux

Fkill - Rechercher et tuer de manière interactive les processus sous Linux

Comment trouver et tuer les processus en cours d'exécution sous Linux

Comment localiser et tuer un processus avec un terminal Linux

Surveillance des processus sous Linux

Comment tuer les processus sous Linux en utilisant kill, killall et pkill