GNU/Linux >> Tutoriels Linux >  >> Linux

10+ exemples pour tuer un processus sous Linux

Dans ce didacticiel, nous parlerons de la suppression d'un processus sous Linux avec plusieurs exemples. Dans la plupart des cas, c'est aussi simple que de taper la commande "kill" suivie de l'ID de processus (généralement abrégé en PID).

Comme vous pouvez le voir, nous avons tué un processus avec l'ID 1813.

Si vous êtes un utilisateur Windows, il peut être utile de considérer la commande "kill" comme l'équivalent Linux du bouton "Fin de tâche" dans le gestionnaire de tâches Windows.

Répertorier les processus en cours d'exécution

La commande "ps -e" listera tout ce qui s'exécute sur votre système. Même avec une installation minimale, la commande affichera probablement plus de 80 résultats, il est donc beaucoup plus facile de rediriger la commande vers "grep" ou "more".

ps -e | grep name-of-process

Dans la capture d'écran ci-dessous, nous vérifions si SSH est en cours d'exécution sur le système.

Cela nous donne également le PID du démon SSH, qui est 1963.

Dirigez-vous vers "plus" si vous souhaitez parcourir les processus en cours d'exécution de votre système un par un.

Vous pouvez également utiliser la commande "top" pour voir une liste des processus en cours d'exécution. Ceci est utile car il vous montrera le nombre de ressources système utilisées par chaque processus.

Le PID, l'utilisateur et le nom de la ressource sont tous identifiés ici, ce qui est utile si vous décidez de supprimer l'un de ces services ultérieurement.

Faites attention aux colonnes %CPU et %MEM, car si vous remarquez qu'un processus sans importance consomme de précieuses ressources système, il est probablement préférable de le tuer !

Un autre moyen très efficace d'obtenir l'ID de processus correspondant consiste à utiliser la commande "pgrep". Le seul argument que vous devez fournir est le nom (ou une partie du nom) du processus en cours d'exécution.

Voici à quoi cela ressemble lorsque nous recherchons SSH. Comme vous pouvez le voir, il renvoie un ID de processus de 2506.

Tuer un processus par PID

Maintenant que nous connaissons le PID du démon SSH, nous pouvons tuer le processus avec la commande kill.

$ sudo kill 1963

Vous pouvez émettre une commande "ps" finale, juste pour vous assurer que le processus a bien été tué.

$ ps -e | grep ssh

Les résultats sont vides, ce qui signifie que le processus a été arrêté avec succès. Si vous remarquez que le processus continue de s'exécuter - ce qui ne devrait normalement pas se produire - vous pouvez essayer d'envoyer un signal d'arrêt différent au processus, comme indiqué dans la session suivante.

Remarque :Il n'est pas toujours nécessaire d'utiliser "sudo" ou le compte d'utilisateur root pour terminer un processus. Dans le premier exemple, nous terminions le démon SSH, qui est exécuté sous l'utilisateur root. Par conséquent, nous devons disposer des autorisations appropriées pour mettre fin au processus.

Signal par défaut envoyé par la commande kill

Par défaut, la commande kill enverra un signal SIGTERM au processus que vous spécifiez.

Cela devrait permettre au processus de se terminer normalement, car SIGTERM indiquera au processus d'effectuer ses procédures d'arrêt normales - en d'autres termes, il ne force pas le processus à se terminer brusquement.

C'est une bonne chose car nous voulons que nos processus s'arrêtent comme prévu.

Parfois, cependant, le signal SIGTERM n'est pas suffisant pour tuer un processus. Si vous exécutez la commande kill et remarquez que le processus est toujours en cours d'exécution, il se peut que le processus soit toujours en cours d'arrêt ou qu'il soit complètement bloqué.

Tuer de force

Pour forcer le processus à se fermer et renoncer à son arrêt normal, vous pouvez envoyer un signal SIGKILL avec le commutateur -9, comme indiqué ici :

$ kill -9 processID

Il peut être tentant de toujours ajouter le commutateur -9 à vos commandes kill car cela fonctionne toujours. Cependant, ce n'est pas la meilleure pratique recommandée. Vous ne devez l'utiliser que sur des processus bloqués et qui refusent de s'arrêter correctement.

Lorsque cela est possible, utilisez le signal SIGTERM par défaut. Cela évitera les erreurs à long terme, car cela donnera au processus une chance de fermer ses fichiers journaux, de mettre fin à toute connexion en attente, etc.

Outre les signaux SIGTERM et SIGKILL, il existe une multitude d'autres signaux que kill peut envoyer aux processus, qui peuvent tous être vus avec le commutateur -l.

Les nombres à côté des noms sont ceux que vous spécifiez dans votre commande "kill". Par exemple, kill -9 est SIGKILL, comme vous le voyez dans la capture d'écran ci-dessus.

Pour les opérations quotidiennes, SIGTERM et SIGKILL sont probablement les seuls signaux que vous n'aurez jamais besoin d'utiliser. Gardez simplement les autres à l'esprit au cas où vous auriez une circonstance étrange où un processus recommande de le terminer avec un signal différent.

Comment tuer tous les processus par leur nom ?

Vous pouvez également utiliser le nom d'un processus en cours d'exécution, plutôt que le PID, avec la commande pkill. Mais attention, cela terminera tous les processus s'exécutant sous le nom spécifié, car kill ne saura pas quel processus spécifique vous essayez de terminer.

$ pkill name-of-process

Découvrez l'exemple ci-dessous, où nous terminons cinq processus avec une seule commande pkill.

Dans cet exemple, nous avions voulu mettre fin à une seule de ces sessions d'écran ; il aurait été nécessaire de spécifier le PID et d'utiliser la commande normale "kill". Sinon, il n'y a aucun moyen de spécifier de manière unique le processus que nous souhaitons terminer.

Comment tuer tous les processus par un utilisateur ?

Vous pouvez également utiliser la commande pkill pour mettre fin à tous les processus en cours d'exécution par un utilisateur Linux. Tout d'abord, pour voir quels processus s'exécutent sous un utilisateur spécifique, utilisez la commande ps avec un commutateur -u.

$ ps -u username

Cette capture d'écran nous montre qu'il existe actuellement cinq services exécutés sous l'utilisateur "geek". Si vous avez besoin de tous les terminer rapidement, vous pouvez le faire avec pkill.

$ pkill -u username

Comment tuer un processus nohup ?

Vous pouvez tuer le processus nohup de la même manière que tout autre processus en cours d'exécution. Notez que vous ne pouvez pas grep pour "nohup" dans la commande ps, vous devrez donc rechercher le processus en cours d'exécution en utilisant les mêmes méthodes que celles indiquées ci-dessus.

Dans cet exemple, nous trouvons un script intitulé "test.sh" qui a été exécuté avec la commande nohup. Comme vous le verrez, le trouver et le terminer est sensiblement le même que dans les exemples ci-dessus.

La seule différence avec la sortie est que le shell nous informe que le processus a été terminé. Cela ne fait pas partie de kill, mais plutôt du résultat de l'exécution du script en arrière-plan (l'esperluette dans cet exemple) et de la connexion au même tty à partir duquel le script a été lancé.

$ nohup ./test.sh &

Comment exécuter un processus en arrière-plan ?

La commande kill est un moyen efficace de mettre fin aux processus que vous exécutez en arrière-plan. Vous avez déjà appris à tuer des processus dans ce didacticiel, mais savoir comment exécuter un processus en arrière-plan est une combinaison efficace à utiliser avec la commande kill.

Vous pouvez ajouter une esperluette (&) à votre commande afin de l'exécuter en arrière-plan. Ceci est utile pour les commandes ou les scripts qui prendront un certain temps à s'exécuter et que vous souhaitez effectuer d'autres tâches entre-temps.

Ici, nous avons mis une simple commande "ls" en arrière-plan. Étant donné que c'est le type de commande qui prend très peu de temps à s'exécuter, nous avons plus de résultats indiquant qu'elle termine son travail juste après.

La sortie de notre capture d'écran indique "Terminé", ce qui signifie que le travail en arrière-plan s'est terminé avec succès. Si vous deviez arrêter le travail à la place, il afficherait "terminé" dans la sortie.

Vous pouvez également déplacer une tâche en arrière-plan en appuyant sur Ctrl+Z sur votre clavier. Le ^Z dans cette capture d'écran indique que nous avons appuyé sur Ctrl+Z et que le script test.sh est passé en arrière-plan.

Vous pouvez voir test.sh continuer à s'exécuter en arrière-plan en exécutant une commande ps.

$ ps -e | grep test.sh

Utiliser la commande d'écran

Une autre façon d'exécuter un processus en arrière-plan consiste à utiliser la commande "screen". Cela fonctionne en créant ce qui équivaut essentiellement à une fenêtre de terminal séparée (ou écran et donc le nom).

Chaque écran que vous créez a son ID de processus, ce qui signifie qu'il s'agit d'un moyen efficace de créer des processus d'arrière-plan qui peuvent être arrêtés ultérieurement à l'aide de la commande kill.

La commande Screen n'est pas fournie avec toutes les installations Linux par défaut, vous devrez donc peut-être l'installer.

Sur les distributions basées sur Ubuntu et Debian, vous pouvez l'installer avec la commande suivante :

$ sudo apt-get install screen

Une fois que vous avez installé la commande screen, vous pouvez créer une nouvelle session en tapant simplement "screen". :

$ screen

Mais, avant de faire cela, il est bon de prendre l'habitude de spécifier des noms pour vos écrans. De cette façon, ils sont faciles à rechercher et à identifier plus tard. Tout ce dont vous avez besoin pour spécifier un nom est le commutateur -S.

$ screen -S my-screen-name

Créons un écran appelé "testing" puis essayons de le terminer avec la commande "kill". Nous commençons ainsi :

Après avoir tapé cette commande et appuyé sur Entrée, nous sommes instantanément redirigés vers notre écran nouvellement créé. C'est ici que vous pouvez démarrer le processus que vous souhaitez exécuter en arrière-plan.

Ceci est particulièrement pratique si vous êtes connecté en SSH à un serveur et avez besoin d'un processus pour continuer à fonctionner même après votre déconnexion.

Avec votre commande/script en cours d'exécution, vous pouvez vous déconnecter de l'écran en appuyant sur Ctrl+A, suivi de D (relâchez les touches Ctrl et A avant d'appuyer sur la touche D).

Comme vous pouvez le voir, la commande screen a répertorié l'ID de processus dès que nous avons détaché l'écran. Bien sûr, nous pouvons terminer cet écran (et la commande/le script qui s'y exécute) en utilisant la commande kill.

Vous pouvez facilement rechercher l'ID de processus de vos sessions d'écran en utilisant cette commande :

$ screen -ls

Si nous n'avions pas nommé notre session d'écran en utilisant le commutateur -S, seul l'ID de processus lui-même serait répertorié. Pour rattacher à l'un des écrans répertoriés, vous pouvez utiliser le commutateur -r :

$ screen -r name-of-screen

ou

$ screen -r PID

Dans la capture d'écran ci-dessous, nous tuons la session screen que nous avons créée (ainsi que tout ce qui est exécuté à l'intérieur de celle-ci), puis émettons une autre commande screen -ls afin de vérifier que le processus est bien terminé.

Comment tuer un processus en arrière-plan ?

Dans l'un de nos exemples de la section précédente, nous avons mis notre script tesh.sh à exécuter en arrière-plan. La plupart des processus en arrière-plan, en particulier les commandes simples, se termineront sans problème.

Cependant, comme tout processus, un en arrière-plan peut refuser de s'arrêter facilement. Notre script test.sh a un PID de 2382, nous allons donc émettre la commande suivante :

$ kill 2383

Dans la capture d'écran, cependant, vous remarquerez que le script a ignoré notre commande kill :

Comme nous l'avons déjà appris, kill -9 est le meilleur moyen de tuer un processus qui est suspendu ou qui refuse de se terminer.

Comment tuer les processus arrêtés ?

Il peut être utile de supprimer d'un coup toutes vos tâches d'arrière-plan arrêtées si elles se sont accumulées et ne vous sont plus utiles. Par exemple, nous exécutons trois instances de notre script test.sh en arrière-plan et elles ont été arrêtées :

$ ./test.sh &

Vous pouvez voir ces processus avec la commande ps :

$ ps -e | grep test.sh

Ou, pour obtenir simplement une liste de toutes les tâches arrêtées sur le système, vous pouvez exécuter la commande jobs :

$ jobs

Le moyen le plus simple de supprimer toutes les tâches arrêtées consiste à utiliser la commande suivante :

$ kill `jobs -ps`

Ou utilisez le commutateur -9 pour vous assurer que les travaux se terminent immédiatement :

$ kill -9 `jobs -ps`

La commande `jobs -ps` répertoriera tous les PID des travaux exécutés en arrière-plan, c'est pourquoi nous pouvons combiner sa sortie avec la commande kill afin de mettre fin à tous les processus arrêtés.

Opération Kill non autorisée

Si vous obtenez une erreur "opération non autorisée" lorsque vous essayez de tuer un processus, c'est parce que vous n'avez pas les autorisations appropriées. Connectez-vous au compte root ou utilisez "sudo" (sur les distributions Debian) avant votre commande kill.

$ sudo kill PID

J'espère que vous trouverez le tutoriel utile. Continuez à revenir.


Linux
  1. Comment tuer un processus zombie sous Linux

  2. 8 commandes Linux pour une gestion efficace des processus

  3. kill Exemples de commandes sous Linux

  4. Exemples de commandes renice sous Linux

  5. Tuer les processus dans Raspbian

Tutoriel de commande Linux nl pour les débutants (7 exemples)

Tutoriel de commande Linux nm pour les débutants (10 exemples)

Linux top Command Tutoriel pour les débutants (8 exemples)

30 meilleurs exemples de commandes pour la surveillance sous Linux

Comment tuer un processus sous Linux

UNIX / Linux :7 exemples pratiques de commandes PS pour la surveillance des processus