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.