Aller au contenu

Processus sous Linux

Le but de cette page est d'identifier les commandes principales permettant de visualiser l'exécution des processus sous Linux, ainsi que le résultat de ces commandes.

  1. Exécuter la commande ps. Quel est le rôle de cette commande ?

    ps
    

    Deux processus devraient être présents :

    • bash qui est le processus du terminal ;
    • et ps qui est le programme listant les processus.
    ~$ ps
        PID TTY          TIME CMD
      17672 pts/1    00:00:00 bash
      18176 pts/1    00:00:00 ps
    

    La commande ps liste les processus lancés par l'utilisateur.

  2. Conjecturer ce qu'est le PID d'un processus.

    Réponse

    Le PID d'un processus est l'identifiant (Process IDentifier) utilisé par le système d'exploitation pour différencier (identifier) chaque processus.

  3. Il est possible de personnaliser les informations que l'on veut afficher avec la commande ps, par exemple obtenir l'identifiant du parent de chaque processus (PPID).

    1. Conjecturer l'affichage obtenu avec la commande ps -o "pid ppid cmd" ?

      Réponse

      Cette commande va afficher l'identifiant du processus, l'identifiant du parent de ce processus et le nom de ce processus.

      ~$ ps -o "pid ppid cmd"
          PID    PPID CMD
        17672   17030 bash
        18933   17672 ps -o pid ppid cmd 
      
    2. Y a-t-il un lien de parenté entre les processus bash et ps ?

      Réponse

      Le processus ps est l'enfant du processus bash.
      En effet, le PPID de ps est le PID de bash.

  4. On exécute à présent la commande ps -o "user pid ppid cmd" -ax.
    Pourquoi le nombre de processus est maintenant très grand ?

    ps -o "user pid ppid cmd" -ax
    

    Tous les processus lancés sur la machine sont affichés, y compris ceux qui n'ont pas été lancés par l'utilisateur.

    On présente ci-dessous un exemple des 10 premiers listés sur une machine :

    ~$ ps -o "user pid ppid cmd" -ax
    USER         PID    PPID CMD
    root           1       0 /sbin/init splash
    root           2       0 [kthreadd]
    root           3       2 [rcu_gp]
    root           4       2 [rcu_par_gp]
    root           8       2 [mm_percpu_wq]
    root           9       2 [ksoftirqd/0]
    root          10       2 [rcu_sched]
    root          11       2 [migration/0]
    root          12       2 [idle_inject/0]
    root          14       2 [cpuhp/0]
    
  5. Quel est le PID de la racine de l'arbre de processus ?

    Réponse

    Le PID de la racine est 0 et ne correspond en fait à aucun processus mais au code d'initialisation du système d'exploitation.
    Il lance deux processus :

    • kthreadd ;
    • et systemd (commande /sbin/init).
  6. Exécuter la commande pstree.

    1. Quel est le rôle de cette commande ?

      pstree
      

      On obtient un affichage ressemblant à :

      ~$ ps
      systemd─┬─accounts-daemon───2*[{accounts-daemon}]
              ├─2*[agetty]
              ├─atd
              ├─cron
              ├─dbus-daemon
              ├─multipathd───6*[{multipathd}]
              ├─networkd-dispat
              ├─polkitd───2*[{polkitd}]
              ├─qemu-ga
              ├─rsyslogd───3*[{rsyslogd}]
              ├─snapd───9*[{snapd}]
              ├─sshd───sshd───sshd───bash───pstree
              ├─systemd───(sd-pam)
              ├─systemd-journal
              ├─systemd-logind
              ├─systemd-network
              ├─systemd-resolve
              ├─systemd-timesyn───{systemd-timesyn}
              ├─systemd-udevd
              └─unattended-upgr───{unattended-upgr}
      

      pstree affiche les processus sous forme d'arbre en fonction de leurs liens de parenté. Par défaut, la racine de l'arbre est le processus systemd

    2. Conjecturer le rôle de la commande pstree 0 puis exécuter cette commande.

      Réponse

      Il est possible de changer la racine en passant en paramètre le PID de la racine voulue. pstree 0 affiche donc l'ensemble des processus sous forme d'arbre :

      ~$ ps
      ?─┬─kthreadd─┬─acpi_thermal_pm
        │          ├─ata_sff
        │          ├─blkcg_punt_bio
        │          ├─charger_manager
        │          ├─cpuhp/0
        │          ├─cryptd
        │          ├─devfreq_wq
        │          ├─ecryptfs-kthrea
        │          ├─edac-poller
        │          ├─ext4-rsv-conver
        │          ├─idle_inject/0
        │          ├─ipv6_addrconf
        │          ├─jbd2/sda1-8
        │          ├─kaluad
        │          ├─kauditd
        │          ├─kblockd
        │          ├─kcompactd0
        │          ├─kdevtmpfs
        │          ├─khugepaged
        │          ├─khungtaskd
        │          ├─kintegrityd
        │          ├─kmpath_handlerd
        │          ├─kmpath_rdacd
        │          ├─kmpathd
        │          ├─ksmd
        │          ├─ksoftirqd/0
        │          ├─kstrp
        │          ├─kswapd0
        │          ├─kthrotld
        │          ├─kworker/0:0-cgroup_destroy
        │          ├─kworker/0:0H-kblockd
        │          ├─kworker/0:1-memcg_kmem_cache
        │          ├─kworker/0:1H-kblockd
        │          ├─kworker/0:2-events
        │          ├─kworker/u2:1-events_unbound
        │          ├─kworker/u2:2-events_power_efficient
        │          ├─kworker/u3:0
        │          ├─loop0
        │          ├─loop1
        │          ├─loop2
        │          ├─loop3
        │          ├─loop4
        │          ├─loop5
        │          ├─loop6
        │          ├─loop7
        │          ├─loop8
        │          ├─loop9
        │          ├─md
        │          ├─migration/0
        │          ├─mm_percpu_wq
        │          ├─netns
        │          ├─oom_reaper
        │          ├─raid5wq
        │          ├─rcu_gp
        │          ├─rcu_par_gp
        │          ├─rcu_sched
        │          ├─rcu_tasks_kthre
        │          ├─scsi_eh_0
        │          ├─scsi_eh_1
        │          ├─scsi_eh_2
        │          ├─scsi_tmf_0
        │          ├─scsi_tmf_1
        │          ├─scsi_tmf_2
        │          ├─tpm_dev_wq
        │          ├─vfio-irqfd-clea
        │          ├─watchdogd
        │          ├─writeback
        │          ├─xfs_mru_cache
        │          └─xfsalloc
        └─systemd─┬─accounts-daemon───2*[{accounts-daemon}]
                  ├─2*[agetty]
                  ├─atd
                  ├─cron
                  ├─dbus-daemon
                  ├─multipathd───6*[{multipathd}]
                  ├─networkd-dispat
                  ├─polkitd───2*[{polkitd}]
                  ├─qemu-ga
                  ├─rsyslogd───3*[{rsyslogd}]
                  ├─snapd───9*[{snapd}]
                  ├─sshd───sshd───sshd───bash───pstree
                  ├─systemd───(sd-pam)
                  ├─systemd-journal
                  ├─systemd-logind
                  ├─systemd-network
                  ├─systemd-resolve
                  ├─systemd-timesyn───{systemd-timesyn}
                  ├─systemd-udevd
                  └─unattended-upgr───{unattended-upgr}
      
  7. La commande ps -aux permet d'afficher tous les processus avec des informations supplémentaires.
    Conjecturer la signification des colonnes %CPU, %MEM et TIME.

    ps -aux
    

    On présente ci-dessous un exemple des 10 premiers listés sur une machine :

    ~$ ps -o "user pid ppid cmd" -ax
    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root           1  0.0  1.1 168860 10928 ?        Ss   Aug29   3:45 /lib/systemd/
    root           2  0.0  0.0      0     0 ?        S    Aug29   0:00 [kthreadd]
    root           3  0.0  0.0      0     0 ?        I<   Aug29   0:00 [rcu_gp]
    root           4  0.0  0.0      0     0 ?        I<   Aug29   0:00 [rcu_par_gp]
    root           6  0.0  0.0      0     0 ?        I<   Aug29   0:00 [kworker/0:0H
    root           9  0.0  0.0      0     0 ?        I<   Aug29   0:00 [mm_percpu_wq
    root          10  0.0  0.0      0     0 ?        S    Aug29   0:50 [ksoftirqd/0]
    root          11  0.0  0.0      0     0 ?        I    Aug29   1:42 [rcu_sched]
    root          12  0.0  0.0      0     0 ?        S    Aug29   0:55 [migration/0]
    root          13  0.0  0.0      0     0 ?        S    Aug29   0:00 [idle_inject/
    
    • %CPU correspond au pourcentage de temps passé par le processus à utiliser le processeur (par défaut dans les 3 dernières secondes).
    • %MEM est le pourcentage de la mémoire vive utilisée par le processus.
    • TIME est le temps passé par le processus à utiliser le processeur depuis sa création.
  8. Exécuter puis conjecturer le rôle de la commande htop.

    Si cette commande ne fonctionne pas, il faut télécharger et installer l'application correspondante. Dans un Terminal, exécuter (éventuellement en « super-utilisateur ») :

    apt-get install htop
    

    Voici un exemple d'affichage : htop

    htop présente des informations similaires à celles de la commande précédente, mais cette fois-ci avec un aspect graphique et dynamique, ainsi que l'utilisation en temps réel du processeur.