$ carnet-linux
PHASE 2 · MODULE 07

Processus & tâches

Tout ce qui tourne sur une machine Linux est un processus. Savoir les observer, les arrêter proprement, les mettre en pause ou les faire survivre à la fermeture du terminal, c'est reprendre le contrôle de son système.

⏱️ Lecture ~45 min 🧪 Pratique ~1 h 🎚️ Niveau intermédiaire
Tux

🎯 Ce que tu sauras à la fin

🧬

Processus

PID, parent, états : la carte d'identité de tout programme.

📊

Surveiller

ps, top, htop et la charge du système.

🛑

Signaux

Arrêter proprement ou de force avec kill.

🎛️

Tâches

Arrière-plan, pause, nohup, tmux et priorités.

Qu'est-ce qu'un processus ?

▶ Vidéo · 1 min 30Les processus : PID, ps et topla carte d'identité de tout ce qui tourne
Animation réalisée pour ce cours. Voix off et musique générées par IA (Google Gemini et Lyria).

Un programme est un fichier sur le disque (/usr/bin/ls). Un processus, c'est ce programme en cours d'exécution, avec sa mémoire, ses fichiers ouverts et son propriétaire. Le même programme peut tourner en plusieurs processus à la fois : chaque onglet de navigateur, chaque terminal ouvert.

AttributSignification
PIDNuméro unique du processus (Process ID)
PPIDPID de son parent : le processus qui l'a lancé
UIDL'utilisateur propriétaire : le processus a ses droits, ni plus ni moins
ÉtatEn cours, endormi, arrêté, zombie… (voir plus bas)
PrioritéSa part de temps processeur (valeur nice)

Un arbre généalogique

Au démarrage, le noyau lance un seul processus, le n°1 : systemd. Tous les autres en descendent. La commande pstree le montre :

user@ubuntu:~$ pstree -p | head -6
systemd(1)─┬─ModemManager(845)─┬─{ModemManager}(860)
           ├─NetworkManager(812)─┬─{NetworkManager}(851)
           ├─cron(799)
           ├─gdm3(1021)───gdm-session-wor(1340)───gdm-wayland-ses(1405)───gnome-session-b(1411)
           ...
user@ubuntu:~$ echo $$                 # le PID de ton shell actuel
4127

Lister les processus : ps

user@ubuntu:~$ ps                              # seulement ceux du terminal courant
    PID TTY          TIME CMD
   4127 pts/0    00:00:00 bash
   4310 pts/0    00:00:00 ps
user@ubuntu:~$ ps aux | head -4                  # tous les processus du système
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.3  23280 13940 ?        Ss   09:12   0:02 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    09:12   0:00 [kthreadd]
user        2215  4.1  9.8 3912640 402116 ?      Sl   09:14   1:55 /snap/firefox/.../firefox
ColonneSignification
%CPU / %MEMPart du processeur et de la mémoire utilisée
RSSMémoire réellement occupée en RAM (en Kio)
TTYLe terminal rattaché (? = aucun : un service)
STATÉtat : R en cours, S endormi (attend), D attente disque, T arrêté, Z zombie
COMMANDLa commande complète ; entre crochets, un fil du noyau
user@ubuntu:~$ ps -eo pid,ppid,user,%mem,cmd --sort=-%mem | head -5   # les 4 plus gourmands en mémoire
user@ubuntu:~$ pgrep -a firefox                                  # PID d'un programme par son nom
2215 /snap/firefox/.../firefox

Sur Ubuntu, /sbin/init (PID 1) est un lien vers systemd. Le dossier /proc/PID/ contient tout ce que le noyau sait d'un processus : essaie cat /proc/$$/status.

Surveiller en direct : top et htop

top - 10:42:11 up  1:30,  1 user,  load average: 0,42, 0,35, 0,30
Tâches: 231 total,   1 en cours, 230 en veille,   0 arrêté,   0 zombie
%Cpu(s):  3,1 ut,  1,0 sy,  0,0 ni, 95,7 id,  0,1 wa
MiB Mém :   3915,2 total,    812,4 libr,   1730,6 util,   1372,2 tamp/cache

    PID UTIL.     PR  NI    VIRT    RES    SHR S  %CPU  %MEM    TEMPS+ COM.
   2215 user      20   0 3912640 402116 151872 S   4,3   9,8   1:55.41 firefox
   1405 user      20   0 4733480 289660 129408 S   1,7   7,1   0:48.12 gnome-shell
Touche dans topAction
P / MTrier par processeur / par mémoire
kEnvoyer un signal à un processus (demande son PID)
1Détailler chaque cœur du processeur
uFiltrer par utilisateur
qQuitter
Lire la charge moyenne (load average)

Les trois nombres sont le nombre moyen de processus qui veulent le processeur, sur 1, 5 et 15 minutes. Compare-les au nombre de cœurs (nproc) : sur 2 cœurs, une charge de 2 signifie « occupé à 100 % » ; au-delà, des processus font la queue. La tendance compte aussi : si le premier nombre est bien plus haut que le dernier, la charge est en train de monter.

htop (sudo apt install htop) fait la même chose en plus lisible : barres colorées par cœur, défilement, recherche avec F3, arbre des processus avec F5, envoi de signaux avec F9, et même la souris.

Arrêter un processus : les signaux

▶ Vidéo · 1 min 30Signaux et tâcheskill, Ctrl+Z, fg, bg
Animation réalisée pour ce cours. Voix off et musique générées par IA (Google Gemini et Lyria).

Un signal est un court message envoyé à un processus. Le processus peut le traiter à sa façon… sauf deux, que le noyau applique de force.

SignalN°SignificationDéclenché par
SIGHUP1Le terminal a été fermé ; beaucoup de services y relisent leur configurationfermeture du terminal
SIGINT2Interruption demandée par l'utilisateurCtrl + C
SIGKILL9Arrêt immédiat, impossible à ignorerkill -9
SIGTERM15Demande polie de se terminer (par défaut)kill
SIGCONT18Reprendre après une pausefg, bg
SIGSTOP19Pause forcée, impossible à ignorerkill -STOP
SIGTSTP20Pause demandée depuis le terminalCtrl + Z
user@ubuntu:~$ sleep 600 &                   # un processus de test, en arrière-plan
[1] 4521
user@ubuntu:~$ kill 4521                    # SIGTERM : « termine, s'il te plaît »
[1]+  Complété              sleep 600
user@ubuntu:~$ kill -9 4600                 # SIGKILL : en dernier recours seulement
user@ubuntu:~$ pkill firefox                 # par nom (motif)
user@ubuntu:~$ killall sleep                 # par nom exact, tous les processus
user@ubuntu:~$ kill -l                       # la liste de tous les signaux
Toujours SIGTERM d'abord

kill (SIGTERM) laisse au programme le temps d'enregistrer, de fermer ses fichiers, de supprimer ses fichiers temporaires. kill -9 le coupe net : risque de fichiers corrompus ou de verrous qui traînent. Attends quelques secondes après un kill avant de passer au -9.

On ne tue que ses propres processus

Un utilisateur ne peut envoyer de signaux qu'à ses processus. Ceux de root ou d'un service demandent sudo. Et pour un service système, on préfère sudo systemctl restart nom (module 10) à un kill.

Premier plan, arrière-plan et pause

CommandeEffet
commande &Lance en arrière-plan : le terminal reste disponible
Ctrl + ZMet en pause la commande au premier plan
jobsListe les tâches du terminal (numérotées %1, %2…)
fg %1Ramène la tâche 1 au premier plan
bg %1Relance la tâche 1 en pause, en arrière-plan
kill %1Envoie SIGTERM à la tâche 1
user@ubuntu:~$ nano notes.txt
# Ctrl+Z pendant l'édition
[1]+  Stoppé                 nano notes.txt
user@ubuntu:~$ sleep 300 &
[2] 4702
user@ubuntu:~$ jobs
[1]+  Stoppé                 nano notes.txt
[2]-  En cours d'exécution   sleep 300 &
user@ubuntu:~$ fg %1                        # retour dans nano, là où on l'avait laissé

Survivre à la fermeture du terminal : nohup et tmux

Quand un terminal se ferme (ou qu'une connexion SSH tombe), ses processus reçoivent SIGHUP et s'arrêtent. Deux parades :

user@ubuntu:~$ nohup ./sauvegarde.sh &          # ignore SIGHUP ; la sortie va dans nohup.out
user@ubuntu:~$ sudo apt install tmux
user@ubuntu:~$ tmux new -s travail             # ouvre une session tmux nommée « travail »
# … lancer une longue tâche, puis Ctrl+B suivi de D pour se détacher
user@ubuntu:~$ tmux ls
travail: 1 windows (created Sat Oct 24 10:58:12 2026)
user@ubuntu:~$ tmux attach -t travail          # on retrouve tout, même depuis une autre connexion

tmux fait bien plus : diviser le terminal en panneaux (Ctrl + B puis % ou "), plusieurs fenêtres… C'est l'outil indispensable dès qu'on travaille sur un serveur distant (module 13).

Les priorités : nice et renice

La valeur nice va de -20 (prioritaire) à 19 (très « gentil », laisse passer les autres). Par défaut : 0. Un utilisateur peut rendre ses processus plus gentils ; seul root peut les rendre plus prioritaires.

user@ubuntu:~$ nice -n 15 tar czf sauvegarde.tar.gz ~/Documents   # compression en tâche de fond, discrète
user@ubuntu:~$ renice -n 10 -p 2215                    # changer la priorité d'un processus existant
2215 (process ID) old priority 0, new priority 10

Glossaire du module

Processus
Programme en cours d'exécution.
PID / PPID
Numéro du processus / de son parent.
systemd
Le processus n°1, ancêtre de tous les autres.
ps / top / htop
Lister / surveiller en direct les processus.
Charge moyenne
Nombre moyen de processus en attente de processeur, sur 1, 5 et 15 min.
Signal
Message envoyé à un processus (SIGTERM, SIGKILL…).
kill / pkill / killall
Envoyer un signal par PID / par motif / par nom.
Premier plan / arrière-plan
Tâche qui occupe le terminal / qui tourne sans le bloquer (&).
jobs / fg / bg
Lister / ramener / relancer les tâches du terminal.
nohup / tmux
Faire survivre une tâche à la fermeture du terminal.
nice
Priorité d'un processus, de -20 à 19.
Zombie
Processus terminé dont le parent n'a pas encore lu le code de retour.

🧠 Quiz : as-tu tout retenu ?

1. Quel est le PID de systemd ?
systemd est le premier processus lancé par le noyau, l'ancêtre de tous les autres.
2. Quelle commande affiche tous les processus du système ?
ps seul ne montre que le terminal courant ; jobs, les tâches du terminal.
3. Quel signal envoie kill 1234 par défaut ?
Une demande polie. SIGKILL n'est envoyé qu'avec -9.
4. Pourquoi éviter kill -9 en premier réflexe ?
SIGKILL coupe net : fichiers mal enregistrés, verrous, fichiers temporaires oubliés.
5. Tu as suspendu un programme avec Ctrl + Z. Comment le reprendre au premier plan ?
bg le relancerait en arrière-plan.
6. Sur une machine à 2 cœurs, la charge moyenne est de 4,0. Cela signifie…
Au-delà du nombre de cœurs, les processus font la queue.
7. Comment lancer une longue tâche qui doit survivre à la déconnexion ?
Le simple & ne protège pas du SIGHUP envoyé à la fermeture du terminal.
8. Quelle valeur nice rend un processus le moins prioritaire ?
Plus la valeur est haute, plus le processus est « gentil » avec les autres.
Réponds aux questions pour voir ton score.

🚀 Mission pratique

À faire dans la machine virtuelle

Coche chaque étape une fois faite : sa correction s'affiche juste en dessous.

  • ✅ Correction
    $ echo $$
    4127
    $ ps -o pid,ppid,cmd -p $$
        PID    PPID CMD
       4127    4119 bash
    $ pstree -s -p $$
    systemd(1)───systemd(1290)───gnome-terminal-(4119)───bash(4127)───pstree(4330)

    -s affiche uniquement la lignée de ton processus. Les numéros varient d'une machine à l'autre.

  • ✅ Correction
    $ ps aux --sort=-%mem | head -4
    # ou en n'affichant que l'essentiel :
    $ ps -eo pid,%mem,cmd --sort=-%mem | head -4

    Sur un bureau Ubuntu, on trouve en général Firefox et gnome-shell en tête.

  • ✅ Correction
    $ top
    # Maj+M : tri par mémoire · Maj+P : tri par processeur · q : quitter
    $ nproc
    2
    $ uptime
     10:45:02 up  1:33,  1 user,  load average: 0,38, 0,33, 0,29

    Ici la charge (0,38) est bien inférieure au nombre de cœurs (2) : la machine est au repos.

  • ✅ Correction
    $ sudo apt install htop
    $ htop
    # F5 : vue en arbre · F3 : recherche · F10 ou q : quitter
  • ✅ Correction
    $ sleep 1000 &
    [1] 4521
    $ pgrep -a sleep
    4521 sleep 1000
    $ kill 4521
    [1]+  Complété              sleep 1000

    Le message « Complété » s'affiche à l'invite suivante. Pour sleep, SIGTERM suffit toujours.

  • ✅ Correction
    $ sleep 500 & sleep 600 &
    [1] 4600
    [2] 4601
    $ kill %1 ; kill -9 %2
    [1]-  Complété              sleep 500
    [2]+  Processus arrêté       sleep 600

    Bash signale le SIGKILL par « Processus arrêté » (Killed). On peut viser une tâche par son numéro %1 au lieu de son PID.

  • ✅ Correction
    $ nano ~/labo/notes.txt
    # Ctrl+Z
    [1]+  Stoppé                 nano /home/user/labo/notes.txt
    $ jobs
    [1]+  Stoppé                 nano /home/user/labo/notes.txt
    $ fg

    nano réapparaît exactement dans l'état où tu l'avais laissé.

  • ✅ Correction
    $ sleep 300
    # Ctrl+Z
    [1]+  Stoppé                 sleep 300
    $ bg
    [1]+ sleep 300 &
    $ jobs
    [1]+  En cours d'exécution   sleep 300 &
  • ✅ Correction
    $ sudo apt install tmux
    $ tmux new -s test
    $ top
    # Ctrl+B puis D pour se détacher, puis fermer le terminal
    # dans un nouveau terminal :
    $ tmux ls
    test: 1 windows (created ...)
    $ tmux attach -t test

    top tourne toujours : la session tmux a survécu à la fermeture du terminal. Pour la fermer : q puis exit.

  • ✅ Correction
    $ nice -n 10 sleep 900 &
    [1] 4810
    $ renice -n 15 -p 4810
    4810 (process ID) old priority 10, new priority 15
    $ ps -o pid,ni,cmd -p 4810
        PID  NI CMD
       4810  15 sleep 900

    Essaie renice -n 5 -p 4810 : refusé sans sudo, car un utilisateur ne peut pas rendre un processus plus prioritaire.

💬 Questions fréquentes

Les questions qui reviennent le plus souvent sur ce module, avec leurs réponses.

Une application graphique ne répond plus, que faire ?

Ouvre un terminal (Ctrl + Alt + T), trouve son nom avec pgrep -a nom ou top, puis pkill nom. Si elle résiste après quelques secondes : pkill -9 nom. GNOME propose aussi « Forcer à quitter » quand une fenêtre ne répond plus. Si c'est tout le bureau qui est figé, passe en console avec Ctrl + Alt + F3 pour agir depuis là.

Qu'est-ce qu'un processus zombie ? Faut-il s'en inquiéter ?

Un zombie (Z dans ps) est un processus terminé dont le parent n'a pas encore récupéré le code de retour. Il n'utilise ni processeur ni mémoire, seulement une ligne dans la table des processus. Quelques zombies sont sans gravité ; on ne peut pas les « tuer », car ils sont déjà morts. C'est le parent qu'il faut corriger ou redémarrer.

kill -9 ne fonctionne pas sur un processus

Soit il appartient à un autre utilisateur (il faut sudo), soit il est en état D : bloqué dans le noyau en attente d'un disque ou d'un partage réseau. Il disparaîtra quand l'opération se débloquera, sinon seul un redémarrage le libérera.