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.
-
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. -
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.
-
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).-
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
-
Y a-t-il un lien de parenté entre les processus
bash
etps
?Réponse
Le processus
ps
est l'enfant du processusbash
.
En effet, le PPID deps
est le PID debash
.
-
-
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]
-
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
).
-
Exécuter la commande
pstree
.-
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 processussystemd
-
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}
-
-
La commande
ps -aux
permet d'afficher tous les processus avec des informations supplémentaires.
Conjecturer la signification des colonnes%CPU
,%MEM
etTIME
.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.
-
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
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.