Aller au contenu

TNSI : OS - Processus & Signaux sur Linux/*Nix⚓︎

Lorsque Linux démarre, le noyau crée un processus spécial appelé init : le parent de tous les processus 1, créé par /sbin/init (peut varier légèrement selon les distributions). Tous les processus du Système sont créés (on dit forkés) depuis init, ou bien l'un de ses enfants/descendants. Le PID d'init vaut 1 et est exécuté en tant que super-utilisateur. Dans ce cours, nous conviendrons que l'utilisateur principal de Linux sera appelé eleve (pas root).

Daemons / Démons⚓︎

Daemons / Démons

Un Daemon 🇫🇷 🇬🇧 / Démon 🇫🇷 est un processus à finalité spécifique (httpd, mysqld, etc..).

Démons vs Processus usuels

Un démon est certes un processus, néanmoins il diffère des autres processus usuels en ceci :

  • Sa durée de vie est longue: il est fréquent que le démon soit démarré lors du démarrage (boot)

du système, et reste ainsi jusqu'à l'extinction du système (shut-down). * un démon tourne en arrière plan, et n'a pas de terminal désigné pour recevoir des entrées et/ou envoyer des sorties

Signaux⚓︎

Signal

Un signal 🇫🇷 🇬🇧 est un message envoyé à un processus par le SE.

Exemples Les plus connus/usités de Signaux sur Linux

La plupart des signaux ont pour effet de tuer le processus, mais :

  • certains ont un autre effet (cf ci-dessous)
  • un programme peut personnaliser sa réponse à certains signaux.

$ man 7 signal
...
Signal        x86/ARM     
──────────────────────────
SIGKILL          9        Tue le processus (utile lorsque SIGTERM échoue, ce signal n'est pas personnalisable)
SIGTERM         15        Demande "poliment" au processus de s'arrêter
SIGCONT         18        Relance le processus
SIGSTOP         19        Suspend le processus
SIGTSTP         20        Reprend le processus là où il se trouvait
Une liste complète des signaux est disponible via :
$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL      10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Quelques Exemples Classiques de Signaux (à connaître), et leurs Significations4

Signal Signification Comportement/Action
SIGINT \(2\) Interruption depuis le clavier
Ctrl+C
SIGQUIT \(3\) Quitte depuis le clavier
(Interruption Forte)
\(Leftrightarrow\) ++ctrl+\++
Terminaison
+core dump
SIGILL \(4\) Instruction Illégale
SIGBUS \(7\) Erreur de Bus
(Erreur d'accès mémoire)
SIGKILL \(9\) Tue le processus courant Terminaison
SIGALRM \(14\) Interruption d'Horloge (alarm) Ignoré
SIGTERM \(15\)
SIGCHLD
ou SIGCLD
\(17\) Un des processus enfant
(Child) est mort ou arreté
Ignoré
SIGCONT \(18\) Redémarrage d'un processus arrêté Ignoré
SIGSTOP \(19\) Stoppe provisoirement
le processus courant
SIGTSTP \(19\) Stoppe provisoirement le processus courant
depuis depuis un Terminal
\(Leftrightarrow\) Ctrl+Z
Suspension
SIGPROF \(27\) Le signaler au Prof..
(pardon, humour..)
Fin du Timer de Profilage
SIGIO \(29\) Les Entrées/Sorties (I/O)
sont désormais possibles
SIGPWR
ou SIGINFO
\(30\) Erreur d'Alimentation Électrique
(Power)

  • Ctrl+C envoie un signal SIGINT (2) au(x) processus courant(s)
  • Ctrl+Z envoie un signal SIGTSTP (20) au processus courant
  • La commande bg envoie SIGCONT au processus
  • La commande fg envoie SIGCONT au processus, et fait en sorte d'attendre la fin
  • Exemple: on peut voir que la commande man a personnalisé sa réponse à SIGINT, car le processus n'est pas tué lorsqu'on tape Ctrl+C.

Quelques Commandes Linux⚓︎

ps⚓︎

La commande ps (pour ProcessuS) permet d'afficher un cliché instantané des processus en cours d'exécution (pour n'importe quel utilisateur).
Il existe différentes personnalités de ps, mais c'est la personnalité linux qui est un standard recommandé de nos jours. Ces personnalités acceptent usuellement plusieurs types d'options :

  1. les options UNIX qui peuvent être regroupées et qui doivent être précédées d'un tiret -
  2. les options BSD qui peuvent être regroupées et qui NE doivent PAS être utilisées avec un tiret
  3. les options GNU de forme longue qui doivent être précédées de deux tirets --

Les options de différents types peuvent être mélangées, mais des conflits peuvent apparaître.

Personnalité Unix

  1. $ ps -ef affiche tous les processus du système
    (ou $ ps -e auquel cas, il restera seulement les colonnes : PID, TTY, TIME, CMD)
    UID           PID    PPID  C STIME   TTY          TIME CMD
    root            1       0  0 avril13 ?      00:00:01 /sbin/init
    root            2       0  0 avril13 ?      00:00:00 [kthreadd]
    root            3       2  0 avril13 ?      00:00:00 [rcu_gp]
    eleve      159336   44078  0 avril13 pts/3  00:00:00 bash
    eleve      197099  197090  0 avril13 pts/4  00:00:00 man ps
    eleve      197109  197099  0 avril13 pts/4  00:00:00 less
    eleve      591437  581935  0 02:46   pts/5  00:00:00 ps -ef
    
  2. $ ps -eo pid,ppid,stat,command affiche tous les processus du système, en personnalisant les colonnes (⚠ ATTENTION: AUCUN espace autour des virgules ⚠)
    $ ps -eo pid,ppid,stat,command
       PID    PPID   STAT COMMAND
         1       0   Ss   /sbin/init
         2       0   S    [kthreadd]
         3       2   I<   [rcu_gp]
       166       2   SN   [ksmd]
       233       2   I<   [nvme-wq]
       989     950   Ssl+ /usr/lib/Xorg :0 -seat seat0 -auth /run/lightdm/root/:0 -nolisten tcp vt9 -novtswitch
      1578    1491   Ssl  xfce4-session
      1652    1564   S<sl /usr/bin/pulseaudio --daemonize=no --log-target=journal
      1667    1578   Sl   Thunar --daemon
    153224       2   I    [kworker/4:0]
    247465   44078   Ss   bash
    253461   44078   Ss   bash
    253626  253461   S+   man ps
    253639  253626   S+   less
    376601   31479   S+   python zombie.py
    376605  376601   Z+   [python] <defunct>
    376648  376643   S    sleep 1
    388627  247465   R+   ps -e -o pid,ppid,stat,command
    
  3. $ ps -lu eleve affiche le format Long des processus de l'Utilisateur eleve :
    $ ps -lu eleve
    F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000    1660    1571  0  80   0 - 162307 -     ?        00:00:03 Thunar
    4 S  1000    2059       1  0  80   0 - 10685608 -   ?        00:02:08 code-oss
    4 S  1000    2785       1  7  80   0 - 3366572 -    ?        00:19:11 firefox
    0 S  1000   26102    2259 19  80   0 - 216226 -     pts/0    00:15:27 mkdocs
    0 S  1000  118425  118387  0  80   0 -  2156 -      pts/1    00:00:00 bash
    4 R  1000  118469  118425  0  80   0 -  2551 -      pts/1    00:00:00 ps
    

Personnalité BSD

  1. $ ps axu affiche tous les processus du système
    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root           1  0.0  0.0 166660 11944 ?        Ss   avril13   0:01 /sbin/init
    root           2  0.0  0.0      0     0 ?        S    avril13   0:00 [kthreadd]
    root           3  0.0  0.0      0     0 ?        I<   avril13   0:00 [rcu_gp]
    eleve      197090  0.0  0.0   8816  5436 pts/4    Ss   avril13   0:00 bash
    eleve      197099  0.0  0.0   9748  5476 pts/4    S+   avril13   0:00 man ps
    eleve      197109  0.0  0.0   6916  2676 pts/4    S+   avril13   0:00 less
    eleve      638264  0.0  0.0  10244  3292 pts/5    R+   03:09   0:00 ps axu
    
  2. $ ps axo user,pid,ppid,stat,command affiche tous les processus du système, en personnalisant les colonnes
    USER         PID    PPID STAT COMMAND
    root           1       0 Ss   /sbin/init
    root           2       0 S    [kthreadd]
    root           3       2 I<   [rcu_gp]
    eleve        1667    1578 Sl   Thunar --daemon
    eleve        2331    2280 Ss   /usr/bin/bash
    eleve      197090   44078 Ss   bash
    eleve      197099  197090 S+   man ps
    eleve      197109  197099 S+   less
    eleve      625514  581935 R+   ps axo user,pid,ppid,stat,command
    

Signification des Colonnes

  • La colonne F (pour Flag / Drapeau) indique un entier lié au processus :
    • 1 : engendré mais pas exécuté
    • 4 : a utilisé des privilèges de super-utilisateur
  • Les états du processus sont représentés :

    • La colonne S (pour State) affiche l'état à un caractère du processus :

    État Signification
    D Dead
    En Veille non interruptible
    (normalement les Entrées et Sorties)
    Attente de Ressources
    ET de Signaux
    I Fil Inactif du noyau
    R Running
    Runnable State
    En Cours d'Exécution
    (ou pouvant s'exécuter)
    dans la File d'exécution
    S Sleeping
    En Sommeil/Veille interruptible
    en Attente d'un événement
    ou de Ressources pour finir
    T sTopped
    / Arrêté par
    le signal de contrôle de la tâche
    t stopped
    / Arrêté par
    le déboggueur lors du traçage
    X Tué: ne devrait jamais être vu
    Z Zombie2 ou defunct / Défunt
    \(=\) un processus fils terminé,
    mais pas (encore) détruit proprement par son parent.
    Il dispose donc encore
    d'un PID - Process ID.
    Encore visible dans la Table des Processus.
    Sur Linux, ces processus seront détruits par init
    si le processus parent se termine.

    • La colonne stat, pour les formats BSD, affiche l'état à plusieurs caractères du processus : Les caractères suivants peuvent être ajoutés en plus du caractère du tableau précédent) (cf. par ex. man ps):

    Caractère Signification
    < Haute priorité (non poli pour les autres utilisateurs)
    N Nice - Basse priorité (poli pour les autres utilisateurs)
    L avec ses pages verrouillées en mémoire
    (pour temps réeL et entrées
    et sorties personnalisées)
    s meneur de session
    l possède plusieurs threads / processus légers
    (« multi-thread », utilisant CLONE_THREAD
    comme NPTL pthreads le fait)
    + dans le groupe de processus au premier plan

  • UID est le User ID : un identifiant sous forme d'entier donné par le système pour l'utilisateur

  • PID est le Process IDentifier : un identifiant sous forme d'entier donné par le système pour le processus
  • PPID est le Parent Process IDentifier qui donne l'identifiant du parent qui a engendré le processus.
  • C est la Chip/puce : (partie entière du) pourcentage d'utilisation du Processeur
  • PRI est la PRIorité du Processus
  • NI est la NIceness (value)/valeur de Politesse du Processus. Cette valeur affecte l'ordonnancement du processus: un entier de \(19\), la plus polie / la moins prioritaire, à \(-20\) la moins polie / la plus prioritaire.
  • TTY: le tty/terminal de contrôle
  • TIME : temps CPU cumulé (en secondes)
  • CMD est le nom de la commande, càd le nom du programme.

Résumé du cycle de vie d'un processus

États des Processus ©

Plus d'infos avec $ man ps ou cette référence 6
(plus d'infos sur man avec man man )

pstree⚓︎

La commande pstree affiche dans le Terminal, une liste structurée des processus, sous forme d'arbre (tree):

$ pstree -p
systemd(1)─┬─ModemManager(1041)─┬─{ModemManager}(1042)
           │                    └─{ModemManager}(1045)
           ├─NetworkManager(882)─┬─{NetworkManager}(984)
           │                     └─{NetworkManager}(991)
           ├─accounts-daemon(1038)─┬─{accounts-daemon}(1060)
           │                       └─{accounts-daemon}(1062)
           ├─avahi-daemon(865)───avahi-daemon(907)
           ├─blueman-tray(1926)─┬─{blueman-tray}(1953)
           │                    ├─{blueman-tray}(1954)
           │                    └─{blueman-tray}(1956)
           ├─bluetoothd(1236)
           ├─code-oss(2059)─┬─electron(2062)───electron(2096)─┬─electron(2130)
           │                │                                 ├─{electron}(2131)
           │                │                                 ├─{electron}(2132)
           │                │                                 ├─{electron}(2134)
           │                ├─electron(2063)───electron(2065)
           │                ├─electron(2099)─┬─{electron}(2102)
           │                │                ├─{electron}(2104)
           │                │                ├─{electron}(2106)
           │                │                └─{electron}(190458)
           │                ├─electron(2116)─┬─{electron}(2118)
           │                │                ├─{electron}(2120)
           │                │                ├─{electron}(2122)
           │                │                ├─{electron}(2123)
           │                │                ├─{electron}(2124)

... (suite de l'affichage coupé: liste assez longue)

où :

  • L'option p ajoute l'affichage du PID de chaque processus

Plus d'infos avec $ man pstree

top⚓︎

La commande top affiche un résumé dynamique en temps réel (mise à jour toutes les secondes environ), des principaux processus/tâches créés dans le système:

top - 19:18:42 up  5:36,  1 user,  load average: 1,37, 1,16, 0,94
Tâches: 419 total,   1 en cours, 418 en veille,   0 arrêté,   0 zombie
%Cpu(s):  5,9 ut,  2,0 sy,  0,7 ni, 91,2 id,  0,1 wa,  0,1 hi,  0,0 si,  0,0 st
MiB Mem :  32017,3 total,  21163,1 libr,   5373,5 util,   5480,7 tamp/cache
MiB Éch :  35223,0 total,  35223,0 libr,      0,0 util.  25945,0 dispo Mem 

    PID UTIL.     PR  NI    VIRT    RES    SHR S  %CPU  %MEM    TEMPS+ COM.           
  26102 luke      20   0  868496 139556  11592 S  42,2   0,4  30:44.67 mkdocs         
   2785 luke      20   0   12,7g   1,1g 477224 S  15,0   3,6  23:29.01 firefox        
  82047 luke      20   0 2780140 262392 122516 S   6,3   0,8   2:33.60 Isolated Web Co
   1037 root      20   0   24,5g 325232 117624 S   3,7   1,0   7:52.84 Xorg           
   1064 root     -51   0       0      0      0 S   3,3   0,0   4:16.50 irq/176-nvidia 
   1645 luke       9 -11 1545484  30492  22680 S   3,0   0,1   4:42.95 pulseaudio     
   1635 luke      20   0  936552 101404  62552 S   2,7   0,3   3:14.55 xfwm4          
    870 dbus      20   0   14352   7188   5368 S   1,3   0,0   0:11.38 dbus-daemon    
   1791 root      20   0  393364  12844  10456 S   1,3   0,0   0:11.79 udisksd        
 194563 luke      20   0  636572  60772  45948 S   1,3   0,2   0:03.17 xfce4-terminal 
  24480 luke      20   0 4250824   1,1g 352344 S   1,0   3,7   6:58.56 thunderbird    
 203664 luke      20   0   11308   4672   3508 R   0,7   0,0   0:00.33 top     

On peut y lire par exemple :

  • Running/En cours d'exécution : 2
  • Sleeping/En veille : 418
  • Stopped/Arrété : 0
  • Zombie/En veille : 0

Les abbréviations du Résumé supérieur signifient 3:

Lettres Signification
ut
/us
UTilisateur
/ USer.
Charge processeur demandée par des processus utilisateurs
(sans compter les polis/nice)
sy
SYstème.
tout temps CPU passé par les instructions bas niveau
, niveau kernel/noyau
ni
NIce
/ Valeur de Politesse
Charge demandée par des processus polis/nicés
id
IDLE
/ Pourcentage de ressources processeur libres
(tâches inactives)
wa
WAit
/ IO-WAit
Charge de processus dédiés à une tâche système ou utilisateur,
mais actuellement en attente de ressource I/O (par ex. réseau ou disque)
hi
Hardware Interrupt
Temps passé à fournir des services
pour les interruptions matérielles
si
Software Interrupt
Temps passé à fournir des services
pour les interruptions logicielles
st
Stolen
Temps volé par cette VM par l'Hyperviseur

et les colonnes:

Colonne Signification
VIRT Taille Totale de la Mémoire VIRtuelle (en KiO - kibioctets)
utilisée par le processus
y compris le code, les données et les librairies partagées, etc..
RES Taille de la Mémoire RÉSiduelle (en KiO - kibioctets)
utilisée par le processus
Une sous-partie de la Mémoire VIRTuelle,
représentant la mémoire physique non échangée
(non -swapped) utilisée par le processus
Par ex.: des pages privées anonymes,
pages privées menant vers des fichiers
(cela inclut les images de programmes,
et librairies partagées)
SHR Taille de la Mémoire Partagée (SHaRed) (en KiO - kibioctets) :
Une sous-partie de la Mémoire RESiduelle utilisée par le processus,
pouvant être utilisée par d'autres processus
%CPU Partie Entière du pourcentage d'utilisation du CPU
%MEM Partie Entière du pourcentage d'utilisation de la Mémoire (RES)
COM. Commande

Plus d'infos avec $ man top

kill⚓︎

Il peut arriver qu'on rencontre des difficultés pour fermer un processus graphique en cliquant par exemple sur la croix (en haut à droite), pourtant prévue à cet effet. Pour résoudre ce problème, il existe une commande kill servant à envoyer des signaux à des processus (par ex. on envoie le signal SIGTERM au processus code-oss pour le TERMINER). Cela suppose néanmoins que l'on connaisse son PID.

Signaux⚓︎

Syntaxe⚓︎

$ kill [-s nomSignal -n numeroSignal] pid | nomProcessus permet de terminer le processus dont le PID vaut pid.

  • Par défaut, la commande kill envoie le Signal SIGTERM (15) au processus indiqué (par son pid, ou son nom), ce qui a pour effet de le terminer. Le signal de Terminaison SIGTERM (15) est préférable au Signal pour Tuer SIGKILL (9), car il peut arriver qu'un processus installe un handler/gestionnaire pour le Signal TERM (SIGTERM) qui va gérer des opérations de nettoyage, par étapes ordonnées, avant de finalement Terminer.
  • Lorsqu'un processus ne parvient pas à terminer après un SIGTERM (15), alors le Signal SIGKILL (9) peut être envoyé.

Liste de Tous les Signaux existants sur Linux

$ kill -l affiche la liste (-l) de tous les signaux d'interruption existants.

$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL      10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Envoi de Signaux via la commande kill

Disons que l'on souhaite terminer le processus de pid=2059 :

  • Signal SIGTERM (15) :
    • $ kill 2059 termine le processus de PID 2059 (SIGTERM est le signal par défaut)
    • $ kill -s SIGTERM 2059 termine le processus de PID 2059
    • $ kill -n 15 2059 termine le processus de PID 2059
    • $ kill -15 2059 termine le processus de PID 2059
  • Signal SIGKILL (9) :
    • $ kill -s SIGKILL 2059 termine le processus de PID 2059
    • $ kill -n 9 2059 termine le processus de PID 2059
    • $ kill -9 2059 termine le processus de PID 2059

Mais comment déterminer le numéro de PID à tuer ?⚓︎

La syntaxe précédente suppose néanmoins que l'on connaisse le numéro de PID : mais lorsque plusieurs lignes de résultats indiquent un nom de processus, on pourrait condre : comment déterminer le PID ? Peut-on exhiber une généalogie entre processus?

$ ps --forest -lU eleve
...
4 S  1000    2095       1  0  80   0 - 10684795 -   ?        00:00:31 code-oss
0 S  1000    2098    2095  0  80   0 - 116532 -     ?        00:00:00  \_ electron
1 S  1000    2132    2098  3  80   0 - 281760 -     ?        00:02:08  |   \_ electron
1 S  1000    2137    2132  0  80   0 - 138619 -     ?        00:00:00  |       \_ electron
4 S  1000    2099    2095  0  80   0 - 116532 -     ?        00:00:00  \_ electron
1 S  1000    2101    2099  0  80   0 - 116532 -     ?        00:00:00  |   \_ electron
0 S  1000    2135    2095  0  80   0 - 131329 -     ?        00:00:00  \_ electron
0 S  1000    2154    2095  6  80   0 - 12255253 -   ?        00:03:57  \_ electron
0 S  1000    2204    2095  0  80   0 - 9582800 -    ?        00:00:15  \_ electron
0 S  1000    2217    2095  0  80   0 - 10657422 -   ?        00:00:03  \_ electron
0 S  1000    2238    2217  0  80   0 - 9575706 -    ?        00:00:04      \_ electron
0 S  1000    2289    2238  0  80   0 -  2238 -      pts/0    00:00:00      |   \_ bash
0 S  1000    3885    2289 14  80   0 - 216013 -     pts/0    00:07:32      |       \_ mkdocs
0 S  1000    2271    2217  0  80   0 - 9602367 -    ?        00:00:02      \_ electron
...

ou bien :

$ pstree -p
systemd(1)─┬─ModemManager(884)─┬─{ModemManager}(898)
           │                   └─{ModemManager}(923)
           ├─NetworkManager(780)─┬─{NetworkManager}(807)
           │                     └─{NetworkManager}(819)
           ├─accounts-daemon(853)─┬─{accounts-daemon}(1093)
           │                      └─{accounts-daemon}(1095)
           ├─anacron(42758)
           ├─avahi-daemon(777)───avahi-daemon(791)
           ├─blueman-tray(1986)─┬─{blueman-tray}(2012)
           │                    ├─{blueman-tray}(2013)
           │                    └─{blueman-tray}(2015)
           ├─bluetoothd(1279)
           ├─code-oss(2095)─┬─electron(2098)───electron(3040)─┬─electron(3042)
           │                │                                 ├─{electron}(3043)
           │                │                                 ├─{electron}(3044)
           │                │                                 ├─{electron}(3045)
           │                │                                 ├─{electron}(3048)
           │                │                                 ├─{electron}(3052)
           │                ├─electron(2099)───electron(3012)
           │                ├─electron(3060)─┬─{electron}(3063)
           │                │                ├─{electron}(3064)

On découvre une "généalogie" des processus pour code-oss : 2095 est le parent de tous les autres. C'est lui qu'il faut interrompre:

$ ps -lC code-oss
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S  1000    2095       1  0  80   0 - 10684795 -   ?        00:00:33 code-oss
$ kill 2095
$ ps -lC code-oss
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

où:

  • L'option C montre le processus lié à une commande (le nom sous CMD, pas la commande CLI)

Plus d'infos avec $ man kill

Les Processus dans le Shell (bash)⚓︎

Le PID du shell courant⚓︎

$ echo $$
33885

Le PID d'un processus enfant dans le Shell⚓︎

$ pwd &
[1] 49080
/home/eleve
[1]+  Fini                    pwd

Le dossier /proc⚓︎

cat /proc/1/status⚓︎

# cat /proc/1/status nomProcessus, ou $ sudo cat /proc/1/status nomProcessus, affiche des informations avancées sur l'état du processus nomProcessus, et

cat /proc/1/status⚓︎

# cat /proc/1/maps, ou $ sudo cat /proc/1/maps, affiche des informations avancées sur la cartographie de la mémoire virtuelle (bibliothèques dynamiques, etc..)

Références & Notes⚓︎

Notes⚓︎