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.

Question

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

Indice

La commande devrait nous retourner ces informations : 

1
eleve@Desktop:~$ ps
2
    PID TTY          TIME CMD
3
  13669 pts/0    00:00:00 bash
4
  15254 pts/0    00:00:00 ps
5

Solution

La commande ps liste les processus lancés par l'utilisateur à un instant t. C'est pourquoi il n'y a que ces 2 processus : bash (le terminal) et la commande ps.

Question

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" ?

Que constatez-vous concernant ces 2 processus ?

Solution

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

1
eleve@Desktop:~$ ps -o "pid ppid cmd"
2
    PID    PPID CMD
3
  13669   13661 bash
4
  15410   13669 ps -o pid ppid cmd

On remarque le processus ps -o pid ppid cmd a pour PPID 133699 (différent lors de votre manipulation), c'est donc l'enfant du processus bash.

Question

On exécute à présent la commande  :

1
ps -o "user pid ppid cmd" -ax

Pourquoi le nombre de processus est maintenant très grand ?

Indice

Allez lire l'aide de la commande ps

Solution

Grâce à l'argument -ax, on peut visualiser tous les processus de la machine de tous les utilisateurs (y compris donc les processus système).

Question

Quels sont les 2 premiers processus lancés, quel est leur PPID ? Quel est le PID de la racine de l'arbre de processus ?

Indice

On lance une commande précédente, et on regarde au sommet de la liste...

Solution

Les 2 premiers processus sont :

  • PID1 : /sbin/init qui lance la suite logiciel systemd

  • PID 2 : [kthreadd]

La racine de l'arbre a pour PID 0 mais ne correspond à aucun processus, c'est le seul cas.

Question

Lancer la commande pstree et donner le rôle de cette commande.

Dire que pourrait être le retour de la commande pstree 0 ; tester la commande pour valider vos prédictions.

Solution

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

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. On retrouve donc [kthreadd] et systemd ; les 2 processus enfants de 0.

Question

La commande ps -aux permet d'afficher tous les processus avec des informations supplémentaires.

Conjecturer la signification des colonnes %CPU, %MEM et TIME.

Solution

  • %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.

À noter que la commande ps donne toujours un état à l'instant t.

Question

Lancez le programme Filezilla.

À l'aide de la commande ps et grep, faites en sorte que d'afficher uniquement les processus liés au lancement de Filezilla.

Une fois réussi (cf la solution), tuez le processus trouvé, que se passe-t-il ?

Indice

Le symbole | est sûrement intéressant... Il s'agit de la commande pipe dont vous trouverez des informations sur cette page.

Solution

1
utilisateur    8213  2.1  1.0 1081020 82028 ?       Sl   11:04   0:01 filezilla
2
utilisateur    8281  0.0  0.0  14612   728 pts/1    S+   11:05   0:00 grep --color=auto filezilla

Question

Il est très simple de créer un fichier texte avec Linux, on peut utiliser le symbole suivant > suivi du nom de fichier.

Créez un fichier processus.txt contenant l'ensemble de vos processus.

Question

On va à présent utiliser la commande top (on sort de la fenêtre avec la touche q), puis htop. Dire ce que réalisent ces commandes...

Indice

htop est un programme annexe, il peut s'installer, au besoin, avec :

1
sudo apt install htop

Solution

top et htop présente des informations similaires aux commande ps, mais cette fois-ci avec un aspect dynamique. htop rajoute également une interface graphique et une utilisation en temps réel du processeur.

Ordonnancement des processus

Un processeur choisit à chaque cycle d’exécution le processus qui doit être exécuté. Le tableau ci-dessous donne pour trois processus P1, P2, P3 :

  • la durée d’exécution (en nombre de cycles),

  • l’instant d’arrivée sur le processeur (exprimé en nombre de cycles à partir de 0),

  • le numéro de priorité.

Le numéro de priorité est d’autant plus petit que la priorité est grande. On suppose qu’à chaque instant, c’est le processus qui a le plus petit numéro de priorité qui est exécuté, ce qui peut provoquer la suspension d’un autre processus, lequel reprendra lorsqu’il sera le plus prioritaire.

Processus

Durée d'exécution

Instant d'arrivée

Numéro de priorité

P1

3

3

1

P2

3

2

2

P3

4

0

3

Question

Reproduire le tableau ci-dessous sur la copie et indiquer dans chacune des cases le processus exécuté à chaque cycle.

Ordonnanceur

Indice

Les cycles d'un processus ne sont pas forcément contigus...

Interaction avec les processus et priorité

Cet exercice a pour but de découvrir comment interagir avec les processus sur Linux et d'expérimenter sur la priorité des processus.

Dans cet exercice, vous allez avoir besoin de deux terminaux connectés à la même machine Linux. Pour distinguer ces deux terminaux dans la suite, on utilisera les expressions « terminal A » et « terminal B ».

Question

  1. Dans le terminal A, lancez la commande sleep 600, qui ne fait qu'attendre pendant 600 secondes.

    Utilisez le terminal B pour trouver le PID du processus sleep grâce aux commandes vues ci-dessus.

  2. Dans le terminal B, tapez la commande kill [PID][PID] est la valeur trouvée à la question précédente.

    Que s'est-il passé dans le terminal A ?

  3. Dans le terminal A, relancez la commande sleep 600.

    • Dans le terminal B, exécutez la commande ps -xo "pid ni cmd" qui permet d'afficher les processus de l'utilisateur avec la priorité, appelée nice sur Linux (colonne NI).

    • Quel est le PID et quelle est la priorité du processus sleep ?

  4. Il est possible de modifier la priorité d'un processus avec la commande renice. Les priorités Linux vont de -20 à +19 (plus la valeur est basse, plus la priorité plus importante) mais un utilisateur normal ne peut la modifier que de 0 à 19.

    • Dans le terminal B, exécutez la commande renice -n 10 [PID][PID] est le PID trouvé à la question précédente.

    • Relancez la commande ps -xo "pid ni cmd". Qu'observez-vous ?

Solution

  • Question 2 :

    Le processus sleep a été interrompu.

  • Question 3 :

    Le processus sleep a pour priorité 0. Le PID sera différent à chaque fois.

  • Question 4 :

    La priorité du processus a bien été modifiée, la valeur passant de 0 à 10.