Commandes de base

ps : Lister les processus sur Linux

Table des matières

Introduction



La commande ps (process status) sous Linux permet d'afficher des informations sur les processus en cours d'exécution sur le système. Elle permet notamment d'afficher les PID (identifiants de processus), les statuts, les consommations de ressources telles que la mémoire et le CPU, les utilisateurs propriétaires et bien plus encore.

A propos de la syntaxe



Dans la page de manuel, nous pouvons apprendre que la commande ps accepte plusieurs syntaxes au niveau des options :
- UNIX : qui peuvent être groupées et doivent être précédées d'un tiret : ps -ef
- BSD : qui peuvent être groupées et ne sont pas précédées d'un tiret : ps aux
- GNU : options longues qui sont précédées par 2 tirets : ps --pid 1

On retrouve de manière générale les 2 premières syntaxes.
J'utilise les 2 syntaxes, mais le plus souvent j'utilise les options de type UNIX.

Utiliser ps



La commande ps seule renvoie les processus en cours dans le shell :

Code BASH :
ps


Code :
  PID TTY          TIME CMD
20468 pts/2    00:00:00 ps
32479 pts/2    00:00:00 bash


C'est assez basique.

L'option -f permet d'afficher plus d'informations :

Code BASH :
ps -f 


Code :
UID        PID  PPID  C STIME TTY          TIME CMD
adrien   22598 32479  0 15:09 pts/2    00:00:00 ps -f
adrien   32479  8765  0 11:28 pts/2    00:00:00 /bin/bash


UID : Utilisateur exécutant le processus
PID : Numéro du processus (Process ID)
PPID : Numéro du processus parent (Parent Process ID)
C : Utilisation CPU
STIME : Heure à laquelle le procesus a démarré
TTY : Terminal TTY qui contrôle ce processus
TIME : Temps CPU accumulé
CMD : Ligne de commande lancée

Pour lister tous les processus d'un utilisateur, on utilisera l'option -u :

Code BASH :
ps -f -u adrien


Voici un extrait :

Code :
UID        PID  PPID  C STIME TTY          TIME CMD
adrien     401  8765  0 15:18 pts/4    00:00:00 /bin/bash
adrien     444   401  3 15:18 pts/4    00:00:40 htop
adrien    3320  7286  0 14:39 tty8     00:00:21 /opt/vivaldi-snapshot/vivaldi-bin --type=rend
adrien    5116  5082  0 10:14 tty8     00:00:00 /usr/libexec/gnome-session-binary
adrien    5132  5116  0 10:14 ?        00:00:00 /usr/bin/ssh-agent -- /usr/bin/gnome-session
adrien    5144     1  0 10:14 tty8     00:00:00 /usr/libexec/gvfsd
adrien    5149     1  0 10:14 tty8     00:00:00 /usr/libexec/at-spi-bus-launcher
adrien    5173  5116  5 10:14 tty8     00:18:53 /usr/bin/gnome-shell
adrien    5577  5116  0 10:14 tty8     00:00:03 /usr/bin/python3.10 /usr/bin/guake
adrien    5747  5577  0 10:14 pts/1    00:00:00 /bin/bash
adrien    8765     1  0 10:42 tty8     00:02:49 /usr/bin/kgx --gapplication-service
adrien    8781  8765  0 10:42 pts/0    00:00:00 /bin/bash
adrien   21763  8765  0 15:09 pts/3    00:00:00 /bin/bash
adrien   28136 32479  0 15:40 pts/2    00:00:00 ps -f -u adrien
adrien   32479  8765  0 11:28 pts/2    00:00:00 /bin/bash


On voit bien des commandes que je n'ai pas lancées, liées à ma session graphique.

Pour listez les processus de tous les utilisateurs du système on utilisera l'option -e :

Code BASH :
ps -ef


La notation similaire au format BSD est la suivante (donc on ne préfixe pas les options avec un tiret) :

Code BASH :
ps aux


Je vous mets un extrait :

Code TEXT :
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ntp       4353  0.0  0.0   9368  2032 ?        S    10:12   0:00 /usr/sbin/chronyd -f /etc/chro
root      4386  0.0  0.0 218264  2548 ?        Ssl  10:12   0:00 /usr/sbin/rsyslogd -f /etc/rsy
root      4420  0.0  0.0   6444  1964 ?        Ss   10:12   0:00 /usr/sbin/crond
root      4483  0.0  0.0 234512  8148 ?        Ssl  10:12   0:00 /usr/sbin/gdm
adrien    8765  0.9  1.1 1937528 188444 tty8   Rl+  10:42   2:46 /usr/bin/kgx --gapplication-service
adrien    8781  0.0  0.0   8860  5736 pts/0    Ss+  10:42   0:00 /bin/bash
adrien   21763  0.0  0.0   8860  5608 pts/3    Ss+  15:09   0:00 /bin/bash
adrien   25959  0.0  0.0   7056  1220 pts/2    R+   15:38   0:00 ps aux
adrien   32479  0.0  0.0   9124  5916 pts/2    Ss   11:28   0:00 /bin/bash


D'autres colones sont présentes avec cette sortie :
USER : Utilisateur exécutant le processus
PID : Numéro du processus (Process ID)
%CPU : Utilisation CPU
%MEM : Utilisation Mémoire physique
VSZ : Mémoire virtuelle du processus (en Kio)
RSS : Mémoire physique (hors pagination) du processus (en Kio)
TTY : Terminal TTY qui contrôle ce processus
STAT : Statut du processus *
START : Heure à laquelle le procesus a démarré
TIME : Temps CPU accumulé
COMMAND : Ligne de commande lancée

*Les statuts de processus sont :
- S (sleeping) : le processus est en attente d'un événement, tel qu'une entrée/sortie.
- R (running) : le processus est en cours d'exécution.
- Z (zombie) : le processus a terminé son exécution, mais n'a pas encore été nettoyé par le système d'exploitation.
- D (disk sleep) : le processus est en attente d'une entrée/sortie bloquante, telle qu'une lecture depuis un disque dur.
- I (Interruptible) : le processus est en attente mais peut être interrompu sans problèmes
- T (stopped) : le processus est en pause,
- X (dead) : le processus a été tué.

Il est possible, pour plus de lisibilité, d'utiliser l'option -H pour dessiner une arborescence :

Code BASH :
ps -fH -u adrien


On voit plus facilement les processus lancés par les autres (extrait) :

Code :
UID        PID  PPID  C STIME TTY          TIME CMD
adrien    8765     1  0 10:42 tty8     00:02:39 /usr/bin/kgx --gapplication-service
adrien    8781  8765  0 10:42 pts/0    00:00:00   /bin/bash
adrien   32479  8765  0 11:28 pts/2    00:00:00   /bin/bash
adrien   20759 32479  0 15:34 pts/2    00:00:00     ps -fH -u adrien
adrien   21763  8765  0 15:09 pts/3    00:00:00   /bin/bash
adrien     401  8765  0 15:18 pts/4    00:00:00   /bin/bash
adrien     444   401  3 15:18 pts/4    00:00:29     htop


On voit bien que kgx est mon terminal. Il a lancé 4 bash (j'ai 4 onglets), ont 1 qui a lancé la commande ps et un qui exécute htop.

On va pouvoir filtrer la sortie si on le souhaite avec l'option -C sur une commande particulière (ici bash) :

Code BASH :
ps -f -C bash


Code :
UID        PID  PPID  C STIME TTY          TIME CMD
adrien     401  8765  0 15:18 pts/4    00:00:00 /bin/bash
adrien    5747  5577  0 10:14 pts/1    00:00:00 /bin/bash
adrien    8781  8765  0 10:42 pts/0    00:00:00 /bin/bash
adrien   21763  8765  0 15:09 pts/3    00:00:00 /bin/bash
adrien   32479  8765  0 11:28 pts/2    00:00:00 /bin/bash


On pourra aussi rechercher un processus par son pid via l'option -q (Exemple avec le process 444) :

Code BASH :
ps -f -q 444


Code :
UID        PID  PPID  C STIME TTY          TIME CMD
adrien     444   401  3 15:18 pts/4    00:00:48 htop
Cette page a été vue 23388 fois