Explorez les rouages de votre système Linux grâce à la commande `ps`. Identifiez les processus actifs par leur nom, l’utilisateur les ayant lancés, ou encore le terminal utilisé, et ce avec une précision modulable. Cet article vous guide à travers cette démarche.
Comprendre la gestion des processus sous Linux
Le noyau, véritable cœur des systèmes d’exploitation Linux et Unix, orchestre l’allocation des ressources vitales comme la mémoire vive (RAM) et le temps processeur (CPU). Cette gestion en temps réel garantit que chaque processus reçoit sa part équitable de ressources, en fonction de sa priorité.
Il arrive que des processus se figent, tournent en boucle, ou cessent de répondre. D’autres peuvent continuer de fonctionner mais consommer des ressources de manière excessive, perturbant l’équilibre du système. Dans ces situations, il est parfois nécessaire de mettre fin à ces processus récalcitrants. La première étape cruciale est donc d’identifier précisément le processus problématique.
Cependant, vous pourriez simplement être curieux de découvrir les processus qui s’exécutent en coulisses sur votre machine. La commande `ps` répond à cette curiosité en offrant une vue d’ensemble des activités en cours, en temps réel. Cette commande flexible vous permet d’obtenir les informations pertinentes sous le format souhaité. `ps` propose de nombreuses options, et celles que nous allons aborder répondent aux besoins les plus courants. Si vous souhaitez explorer davantage les possibilités de `ps`, cette introduction vous facilitera la compréhension du manuel.
Afficher la liste des processus
L’utilisation la plus simple de `ps` consiste à l’exécuter sans aucun paramètre :
ps
Cette commande affiche une liste des processus lancés par l’utilisateur qui l’a exécutée.
Les colonnes affichées sont les suivantes :
PID | Numéro d’identification du processus. |
TTY | Nom du terminal auquel l’utilisateur est connecté. |
TIME | Temps CPU total utilisé par le processus. |
CMD | Nom de la commande ayant lancé le processus. |
Lister tous les processus, tous utilisateurs confondus
En utilisant l’option `-e` (pour sélectionner tous les processus), la commande `ps` affiche la liste de tous les processus, et non seulement ceux de l’utilisateur actuel. Étant donné que cette liste peut être longue, il est conseillé de la rediriger vers la commande `less`:
ps -e | less
La sortie de `ps` est alors redirigée vers `less`.
La liste est bien plus conséquente, mais les mêmes quatre colonnes sont présentes. Les entrées avec un point d’interrogation dans la colonne TTY indiquent que ces processus n’ont pas été lancés depuis un terminal.
Visualiser la hiérarchie des processus
La compréhension de la filiation des processus peut être cruciale pour identifier un processus spécifique ou résoudre un problème. L’option `-H` (hiérarchie) permet de visualiser ces relations.
ps -eH | less
L’indentation révèle quels processus sont les parents des autres.
Pour plus de clarté, l’option `–forest` permet d’afficher la hiérarchie sous forme d’arbre, en utilisant des caractères ASCII.
ps -eH --forest | less
La filiation des processus devient plus facile à suivre.
Filtrer les processus par leur nom
La sortie de `ps` peut être filtrée à l’aide de `grep` pour afficher les lignes contenant le terme de votre recherche. Dans cet exemple, nous recherchons les processus dont le nom inclut « firefox »:
ps -e | grep firefox
Dans cet exemple, la sortie affiche une seule entrée. Si plusieurs instances de Firefox étaient en cours d’exécution, plusieurs lignes seraient affichées.
Afficher davantage de colonnes
L’option `-f` (format complet) permet d’ajouter des colonnes à la sortie de `ps`.
ps -ef | less
La sortie de `ps` s’enrichit de nouvelles informations.
Voici la signification des colonnes :
UID | Identifiant de l’utilisateur propriétaire du processus. |
PID | Identifiant du processus. |
PPID | Identifiant du processus parent. |
C | Nombre d’enfants du processus. |
STIME | Heure de démarrage du processus. |
TTY | Nom du terminal auquel l’utilisateur est connecté. |
TIME | Temps CPU total utilisé par le processus. |
CMD | Nom de la commande ayant lancé le processus. |
L’option `-F` (format extra-complet) permet d’afficher encore plus de colonnes :
ps -eF | less
L’affichage de toutes les colonnes nécessite un défilement latéral.
Utilisez la touche « Flèche droite » pour faire défiler vers la droite.
Voici la signification des colonnes supplémentaires :
UID | Identifiant de l’utilisateur propriétaire du processus. |
PID | Identifiant du processus. |
PPID | Identifiant du processus parent. |
C | Nombre d’enfants du processus. |
SZ | Taille en pages RAM de l’image mémoire du processus. |
RSS | Taille de l’ensemble de la mémoire physique non permutée utilisée par le processus. |
PSR | Processeur auquel le processus est affecté. |
STIME | Heure de démarrage du processus. |
TTY | Nom du terminal auquel l’utilisateur est connecté. |
TIME | Temps CPU total utilisé par le processus. |
CMD | Nom de la commande ayant lancé le processus. |
Lister les processus par leur identifiant
Une fois que vous avez identifié l’identifiant d’un processus qui vous intéresse, vous pouvez l’utiliser avec la commande `ps` pour afficher les détails spécifiques de ce processus. L’option `-p` (sélectionner par PID) permet d’atteindre cet objectif :
ps -p 3403
Les détails du processus sont affichés :
Vous pouvez spécifier plusieurs identifiants de processus, séparés par des espaces.
Lister les processus par leur commande
L’option `-C` (commande) permet de rechercher un processus en utilisant le nom de la commande qui l’a lancé. Notez que cela diffère de la ligne de commande, qui peut inclure des chemins et des options.
ps -C shutter
Les détails du processus `shutter` sont affichés.
Lister les processus appartenant à un utilisateur
Pour afficher les processus d’un utilisateur spécifique, utilisez l’option `-u` (liste d’utilisateurs) :
ps -u mary
Les processus associés à l’utilisateur `mary` sont affichés :
Lister les processus par terminal
Pour visualiser les processus liés à un terminal (TTY), utilisez l’option `-t` (sélection par TTY). Utilisée sans numéro de TTY, l’option `-t` affiche les processus associés au terminal actuel.
tty
ps -t
La commande `tty` indique qu’il s’agit du pseudo-terminal 0. Les processus listés par `ps -t` sont tous liés au TTY `pts/0`.
En spécifiant un numéro de TTY, vous afficherez les processus associés à ce terminal.
ps -t 1
Cette fois, les processus sont tous associés au TTY `pts/1`.
Choisir les colonnes à afficher
L’option `-o` (format) permet de personnaliser les colonnes à afficher. Les noms des colonnes sont disponibles dans la section « Spécificateurs de format standard » de la page de manuel de `ps`. Dans cet exemple, nous sélectionnons le temps CPU (`pcpu`) et la ligne de commande avec arguments (`args`) :
ps -e -o pcpu,args | less
Seules les deux colonnes demandées sont affichées.
Trier la sortie par colonne
L’option `–sort` permet de trier la sortie. Trions par exemple la sortie par la colonne CPU :
ps -e -o pcpu,args --sort -pcpu| less
Le tiret devant `pcpu` indique un tri décroissant.
Pour afficher les dix processus les plus gourmands en ressources processeur, on redirige la sortie vers la commande `head`:
ps -e -o pcpu,args --sort -pcpu | head -10
La liste est triée et tronquée.
L’ajout de colonnes permet de trier sur plusieurs critères. Par exemple, ajoutons la colonne `pmem`, qui représente le pourcentage de mémoire utilisé par le processus. Sans tiret, ou avec le signe `+`, l’ordre de tri est croissant.
ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10
La nouvelle colonne est ajoutée et prise en compte pour le tri. La première colonne est triée avant la seconde, et la seconde est triée par ordre croissant car il n’y a pas de tiret devant `pmem`.
Pour rendre le résultat plus utile, ajoutons la colonne `pid` (identifiant du processus) :
ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10
Il est maintenant possible d’identifier les processus.
Mettre fin à un processus par son identifiant
Après avoir identifié un processus, par son nom, sa commande, son utilisateur, son terminal, ou ses attributs dynamiques comme l’utilisation du CPU et de la mémoire, vous pouvez le mettre fin à l’aide de la commande `kill`. Par exemple, pour mettre fin au processus d’identifiant 898, la commande serait :
sudo kill 898
Si tout se déroule correctement, le processus s’arrête silencieusement.
Mettre fin à un processus par son nom
La commande `pkill` permet de mettre fin à un processus par son nom. Il est important de s’assurer d’avoir identifié le bon processus ! Cette commande mettra fin au processus principal.
sudo pkill top
Encore une fois, l’absence de message est signe de réussite. Le processus a été stoppé sans encombre.
Mettre fin à plusieurs processus du même nom
Si plusieurs copies d’un même processus sont en cours d’exécution, ou si un processus a engendré plusieurs processus enfants (comme c’est le cas pour Google Chrome), la commande `killall` permet de les arrêter tous en même temps. Par exemple, supposons que deux instances de la commande `top` soient en cours d’exécution :
ps -e | grep top
La commande suivante permet de mettre fin à ces deux instances:
sudo killall top
Aucune réponse signifie que les processus ont été interrompus sans problème.
Obtenir une vue dynamique avec top
La sortie de `ps` est une image instantanée, elle ne se met pas à jour. Pour une vue dynamique des processus en cours, utilisez la commande `top`. Elle offre une vue constamment mise à jour des processus actifs. L’affichage est divisé en deux parties : un tableau de bord en haut de l’écran, et un tableau de données en bas de l’écran.
Lancez `top` avec la commande suivante :
top
Les colonnes affichent les informations suivantes:
PID | Identifiant du processus |
USER | Nom du propriétaire du processus |
PR | Priorité du processus |
NI | Valeur de gentillesse du processus |