GNU/Linux >> Tutoriels Linux >  >> Linux

Gestion des processus sous Linux avec kill et killall

Sous Linux, chaque programme et démon est un "processus". La plupart des processus représentent un seul programme en cours d'exécution. D'autres programmes peuvent dériver d'autres processus, tels que des processus pour écouter certaines choses se produire, puis y répondre. Et chaque processus nécessite une certaine quantité de mémoire et de puissance de traitement. Plus vous avez de processus en cours d'exécution, plus vous aurez besoin de cycles de mémoire et de processeur. Sur des systèmes plus anciens, comme mon ordinateur portable de sept ans, ou des ordinateurs plus petits, comme le Raspberry Pi, vous pouvez tirer le meilleur parti de votre système si vous gardez un œil sur les processus qui s'exécutent en arrière-plan.

Vous pouvez obtenir une liste des processus en cours d'exécution avec le ps commande. Vous voudrez généralement donner ps certaines options pour afficher plus d'informations dans sa sortie. J'aime utiliser le -e option pour voir tous les processus en cours d'exécution sur mon système, et le -f option pour obtenir tous les détails sur chaque processus. Voici quelques exemples :

$ ps
    PID TTY          TIME CMD
  88000 pts/0    00:00:00 bash
  88052 pts/0    00:00:00 ps
  88053 pts/0    00:00:00 head
$ ps -e | head
    PID TTY          TIME CMD
      1 ?        00:00:50 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      6 ?        00:00:02 kworker/0:0H-events_highpri
      9 ?        00:00:00 mm_percpu_wq
     10 ?        00:00:01 ksoftirqd/0
     11 ?        00:00:12 rcu_sched
     12 ?        00:00:00 migration/0
$ ps -ef | head
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 13:51 ?        00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36
root           2       0  0 13:51 ?        00:00:00 [kthreadd]
root           3       2  0 13:51 ?        00:00:00 [rcu_gp]
root           4       2  0 13:51 ?        00:00:00 [rcu_par_gp]
root           6       2  0 13:51 ?        00:00:02 [kworker/0:0H-kblockd]
root           9       2  0 13:51 ?        00:00:00 [mm_percpu_wq]
root          10       2  0 13:51 ?        00:00:01 [ksoftirqd/0]
root          11       2  0 13:51 ?        00:00:12 [rcu_sched]
root          12       2  0 13:51 ?        00:00:00 [migration/0]

Le dernier exemple montre le plus de détails. Sur chaque ligne, l'UID (ID utilisateur) indique l'utilisateur propriétaire du processus. Le PID (ID de processus) représente l'ID numérique de chaque processus, et le PPID (ID de processus parent) indique l'ID du processus qui a engendré celui-ci. Dans tout système Unix, les processus comptent à partir du PID 1, le premier processus à s'exécuter une fois le noyau démarré. Ici, systemd est le premier processus, qui a engendré kthreadd . Et kthreadd créé d'autres processus, y compris rcu_gp , rcu_par_gp , et un tas d'autres.

Gestion des processus avec la commande kill

Le système s'occupera de lui-même de la plupart des processus d'arrière-plan, vous n'avez donc pas à vous en soucier. Vous ne devriez avoir à vous impliquer que dans la gestion des processus que vous créez, généralement en exécutant des applications. Alors que de nombreuses applications exécutent un processus à la fois (pensez à votre lecteur de musique, à votre émulateur de terminal ou à votre jeu), d'autres applications peuvent créer des processus en arrière-plan. Certains d'entre eux peuvent continuer à fonctionner lorsque vous quittez l'application afin qu'ils puissent se remettre au travail rapidement la prochaine fois que vous démarrez l'application.

La gestion des processus est un problème lorsque j'exécute Chromium, la base open source du navigateur Chrome de Google. Chromium fait travailler mon ordinateur portable assez dur et déclenche de nombreux processus supplémentaires. À l'heure actuelle, je peux voir ces processus Chromium s'exécuter avec seulement cinq onglets ouverts :

$ ps -ef | fgrep chromium
jhall      66221   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      66230   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
[...]
jhall      66861   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      67329   65132  0 15:45 pts/0    00:00:00 grep -F chromium

J'ai omis certaines lignes, mais il y a 20 processus Chromium et un grep processus qui recherche la chaîne "chrome".

$ ps -ef | fgrep chromium | wc -l
21

Mais après avoir quitté Chromium, ces processus restent ouverts. Comment les arrêter et récupérer la mémoire et le processeur que ces processus occupent ?

Le tuer La commande vous permet de terminer un processus. Dans le cas le plus simple, vous dites tuer le PID de ce que vous voulez arrêter. Par exemple, pour terminer chacun de ces processus, j'aurais besoin d'exécuter le kill commande contre chacun des 20 ID de processus Chromium. Une façon de le faire est d'utiliser une ligne de commande qui obtient les PID Chromium et une autre qui exécute kill contre cette liste :

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'
66221
66230
66239
66257
66262
66283
66284
66285
66324
66337
66360
66370
66386
66402
66503
66539
66595
66734
66848
66861
69702

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids
$ kill $( cat /tmp/pids)

Ces deux dernières lignes sont la clé. La première ligne de commande génère une liste d'ID de processus pour le navigateur Chromium. La deuxième ligne de commande exécute le kill commande par rapport à cette liste d'ID de processus.

Présentation de la commande killall

Un moyen plus simple d'arrêter un tas de processus en même temps est d'utiliser le killall commande. Comme vous pouvez le deviner par son nom, killall termine tous les processus qui correspondent à un nom. Cela signifie que nous pouvons utiliser cette commande pour arrêter tous nos processus Chromium malveillants. C'est aussi simple que :

$ killall /usr/lib64/chromium-browser/chromium-browser

Mais soyez prudent avec killall . Cette commande peut mettre fin à tout processus correspondant à ce que vous lui donnez. C'est pourquoi j'aime d'abord utiliser ps -ef pour vérifier mes processus en cours d'exécution, puis exécutez killall contre le chemin exact de la commande que je veux arrêter.

Vous pouvez également utiliser le -i ou --interactif possibilité de demander killall pour vous avertir avant d'arrêter chaque processus.

tuer prend également en charge les options permettant de sélectionner des processus antérieurs à une heure spécifique à l'aide de -o ou --plus-que option. Cela peut être utile si vous découvrez un ensemble de processus malveillants qui s'exécutent sans surveillance depuis plusieurs jours, par exemple. Ou vous pouvez sélectionner des processus plus récents qu'une heure spécifique, tels que des processus incontrôlables que vous avez récemment démarrés. Utilisez le -y ou --plus-jeune que option pour sélectionner ces processus.

Autres façons de gérer les processus

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

La gestion des processus peut être une partie importante de la maintenance du système. Au début de ma carrière en tant qu'administrateur de systèmes Unix et Linux, la possibilité de supprimer les travaux échappés était un outil utile pour maintenir le bon fonctionnement des systèmes. Vous n'aurez peut-être pas besoin de tuer les processus malveillants dans un bureau Linux moderne, mais sachant tuer et killall peut vous aider lorsque les choses tournent mal.

Vous pouvez également rechercher d'autres moyens de gérer les processus. Dans mon cas, je n'avais pas vraiment besoin d'utiliser kill ou killall pour arrêter les processus Chromium en arrière-plan après avoir quitté le navigateur. Il existe un paramètre simple dans Chromium pour contrôler cela :

Néanmoins, c'est toujours une bonne idée de garder un œil sur les processus en cours d'exécution sur votre système et de savoir comment les gérer en cas de besoin.


Linux
  1. Gérer votre matériel connecté sous Linux avec systemd-udevd

  2. Créer et gérer des partitions sous Linux avec parted

  3. Comment tuer les processus en cours d'exécution sous Linux

  4. Linux :trouver et tuer les processus zombies

  5. Meilleur moyen de tuer les processus d'état Zombie et D 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

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

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

commande fuser Linux avec des exemples