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 ?psDeux processus devraient être présents :
bashqui est le processus du terminal ;- et
psqui est le programme listant les processus.
~$ ps PID TTY TIME CMD 17672 pts/1 00:00:00 bash 18176 pts/1 00:00:00 psLa commande
psliste 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
bashetps?Réponse
Le processus
psest l'enfant du processusbash.
En effet, le PPID depsest 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" -axTous 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 ?
pstreeOn 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}pstreeaffiche 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 0puis 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 0affiche 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 -auxpermet d'afficher tous les processus avec des informations supplémentaires.
Conjecturer la signification des colonnes%CPU,%MEMetTIME.ps -auxOn 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/%CPUcorrespond au pourcentage de temps passé par le processus à utiliser le processeur (par défaut dans les 3 dernières secondes).%MEMest le pourcentage de la mémoire vive utilisée par le processus.TIMEest 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 htopVoici un exemple d'affichage :

htoppré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.