Mise à jour : Debian 11.1 Bullseye
Les processus sont les instances d'exécution des commandes lancée par l'utilisateur, le système ou le noyau.
Un processus est créé chaque fois qu'une commande est lancée. Ce processus est
identifié par un identifiant unique (PID)
rattaché au processus parent qui l'a créé
Le premier processus, PID 1, est créé par init (systemd). Tous les autres processus lui sont rattachés directement ou par l'intermédiaire de leurs parents successifs.
L'envoi d'un signal de terminaison par l'intermédiaire d'une commande kill permet de terminer un processus. Lorsque le processus se termine, son identifiant est supprimé et les processus fils restant sont rattachés au PID 1.
Lorsque le processus a été créé, il peut-être dans l'un des états suivants :
R - running = en cours d'exécution ou en attente de disponibilité processeur
S - sleeping = en attente d'un signal d'un autre processus pour poursuivre l'exécution T - stopped = en attente d'un signal externe pour redémarrer Z - zombie = le processus est "mort", mais son parent n'a pas récupéré l'information
Afficher la liste de tous les processus
$ ps -e
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:32 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:00 lru-add-drain
.....
Afficher les processus 1,2,3
$ ps -p 1,2,3
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 /sbin/init
2 ? S 0:00 [kthreadd]
3 ? S 0:00 [ksoftirqd/0]
Afficher les processus systemd,sh
$ ps -C systemd,sh
PID TTY TIME CMD
1 ? 00:00:01 systemd
1108 ? 00:00:00 systemd
1113 ? 00:00:00 sh
Afficher les processus du pseudo-terminal esclave 0 (pts/0)
$ ps -t 0
PID TTY TIME CMD
4689 pts/0 00:00:00 bash
4703 pts/0 00:00:13 xeyes
4704 pts/0 00:00:13 xeyes
4705 pts/0 00:00:13 xeyes
$ ps -t tty1
PID TTY TIME CMD
840 tty1 00:00:00 login
5265 tty1 00:00:00 bash
$ pstree -lp
systemd(1)─┬─acpid(725)
├─agetty(804)
├─apache2(892)─┬─apache2(893)
│ ├─apache2(902)
│ ├─apache2(903)-lp N
│ ├─apache2(904)
│ ├─apache2(905)
│ ├─apache2(906)
│ └─apache2(2942)
├─atd(722)
├─atop(809)
..........
Afficher l'arborescence des processus par ordre numérique (option -n), avec leur pid (option -p), format ligne longue (option -l)
$ pstree -nlp
systemd(1)─┬─systemd-journal(319)
├─systemd-udevd(357)
├─systemd-timesyn(686)───{sd-resolve}(720)
├─rsyslogd(721)─┬─{in:imuxsock}(729)
│ ├─{in:imklog}(730)
│ └─{rs:main Q:Reg}(731)
├─sshd(722)
.......
De nombreuses informations sont attachées à chaque processus et sont disponibles avec la commande ps.
Disponibles avec ou sans option :
PID : identifiant du processus
TTY : le cas échéant, le terminal ayant lancé la commande
TIME : temps de calcul cumulé
CMD ou COMMAND : nom de la commande ayant créé le processus
Communes aux options -f -l u
UID : identifiant ou nom (selon disponibilité de la place) du propriétaire du processus (-f -fl)
USER : nom du propriétaire du processus (u)
STIME ou START : date de lancement
Spécifiques aux options -f -l
PPID : identifiant du processus du parent
NI : gentillesse du processus (-l seulement)
Spécifiques aux options -l u
%CPU : charge cpu : temps occupation CPU ramené au temps d'activité du processus STAT ou S : état du processus
-o stat -o nice -o user -o pid -o ppid -o pcpu -o pmem -o cmd
Sans option
$ ps -p 4273
PID TTY TIME CMD
4273 pts/1 00:00:00 bash
Option -f
$ ps -p 4273 -f
UID PID PPID C STIME TTY TIME CMD
philippe 4273 4198 0 11:02 pts/1 00:00:00 bash
$ ps -p 6408 -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S philippe 6408 6403 0 80 0 - 5691 - 14:21 pts/0 00:00:00 bash
Option u
$ ps -C firefox-esr u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
philippe 4773 0.8 3.7 2216340 302804 ? Sl 12:01 0:32 /usr/lib/firefox-esr/firefox-esr
Option uc : affichage court du chemin de la commande
$ ps -C firefox-esr uc
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
philippe 4773 0.8 3.7 2216340 302804 ? Sl 12:01 0:32 firefox-esr
Options personnalisées
$ ps -o stat -o nice -o user -o pid -o ppid -o pcpu -o pmem -o cmd -p 20919
STAT NI USER PID PPID %CPU %MEM CMD
S 0 root 20919 2 0.0 0.0 [kworker/2:1]
Pour simplifier la commande, utiliser un alias : psp (ps personnalisé)
$ alias psp="ps -o stat -o nice -o user -o pid -o ppid -o pcpu -o pmem -o cmd"
$ psp c -p 20961
STAT NI USER PID PPID %CPU %MEM CMD
S<l -15 philippe 20961 6116 2.5 3.3 firefox-esr
$ psp -C firefox-esr
STAT NI USER PID PPID %CPU %MEM CMD
S<l -15 philippe 20961 6116 54.7 2.8 /usr/lib/firefox-esr/firefox-esr
$ pgrep firefo
2041
$ pgrep -l firefo
2041 firefox-esr
Dans l'exemple ci-dessus, la commande qui a permis le lancement était firefox, mais un script intermédiaire a lancé le programme firefox-esr. Au moment de la recherche, le script n'était plus en fonctionnement, il n'apparaît pas dans la liste des process.
Rechercher un processus par nom de propriétaire
$ pgrep -l -U www-data
5519 apache2
5522 apache2
5523 apache2
5524 apache2
5525 apache2
5526 apache2
$ kill 10028
Terminer les processus désignés par le nom ou partie de nom d'une commande
$ pkill -e xey
xeyes killed (pid 7114)
xeyes killed (pid 7115)
xeyes killed (pid 7116)
[2]- Complété xeyes
[3]+ Complété xeyes
$ killall xeyes
Signaux de terminaison :
9 KILL Terminaison brutale (risque de pertes de donnée)
15 TERM Terminaison propre utilisée par défaut par la commande kill
Signaux de suspension et reprise :
19 STOP Suspension temporaire (non interceptable)
18 CONT Reprise d'activité après S1
Signaux équivalents à des combinaisons de touche
2 INT Terminaison propre équivalente à la combinaison de touches Ctrl C
20 TSTP Suspension temporaire équivalente à la combinaison de touches Ctlr Z
Exemple : envoi du signal 19 STOP au processus 7122
$ kill -n 19 7122
ou
$ kill -s STOP 7122
Exemple : envoi signal 18 CONT aux commandes dont le nom contient xey
$ pkill -18 xey
ou
$ pkill -CONT xey
$ killall -s 19 xeyes
ou
$ killall s STOP xeyes
La priorité d'exécution d'un processus est défini par la valeur de sa gentillesse (nice). Par défaut, la priorité est de 0 et peut être modifiée entre
20 priorité minimale
-19 priorité maximale
Utiliser l'option -l de ps pour afficher la gentillesse des processus (colonne NI) :
$ ps -l -C xeyes
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S philippe 3534 3498 0 80 0 - 11626 SyS_po 19:44 pts/0 00:00:05 xeyes
Ou bien utiliser l'option -o ni
$ ps -o ni -C xeyes
NI
0
Pour lancer une commande avec une gentillesse donnée, utiliser la commande nice.
$ nice -n 10 xeyes
# nice -n -10 xeyes
Pour modifier la valeur d'une gentillesse, utiliser la commande renice.
$ nice -n 10 xeyes &
[1] 8578
$ renice -n 15 8578
8578 (process ID) priorité précédente 10, nouvelle priorité 15
L'augmentation de la valeur d'une gentillesse doit être effectuée en mode privilégié. Si le processus est en mode utilisateur, utiliser l'option -u. Exemple :
# renice -n -15 8613 -u philippe
8613 (process ID) priorité précédente 10, nouvelle priorité -15
1000 (user ID) priorité précédente -15, nouvelle priorité -15