Gestion des processus

Sommaire

Index

Introduction

UNIX/Linux permettent de gérer des processus de manière parallèle: pendant qu’un logiciel est exécuté, un autre peut également l’être. Ceci donne l’illusion que les deux programmes tournent en parallèle.

Nous présentons ici quelques fonctionnalités du shell. Même si vous n’utilisez pas toutes les fonctionnalités, il est utile de les connaître, dans le cas où vous en auriez besoin.

Conventions

Dans ce document, quand vous rencontrez :

$ sleep 5
<wait 5 seconds>
$

Quand vous voyez <Ctrl-C>, cela signifie que vous devez enfoncer la touche Ctrl et la touche C en même temps (pour cela, enfoncer d’abord la touche Ctrl puis presser brièvement et relâcher la touche C, et relâcher la touche Ctrl).

Gestion des processus

Exécution

Quand vous lancez :

sleep 5

le processus se met en pause pendant 5 secondes.

Terminaison

Vous exécutez cette commande en foreground. Ce qui signifie que le shell attend la fin de la commande avant de vous “rendre la main”. Maintenant exécutez :

$ sleep 6000
<Ctrl-C>
$

Quand vous pressez la séquence de touche, vous envoyez un signal de terminaison au processus actuel (celui qui s’exécute en avant plan), ce qui fait que vous n’avez pas à attendre 6000 secondes avant de pouvoir exécuter une nouvelle commande.

Exécution en arrière-plan

Plutôt que de lancer une commande en foreground (avant-plan), on peut la lancer en background (arrière-plan).

Ceci se fait simplement en rajoutant un & après la commande.

$ sleep 6000 &
[3] 27181
$

En exécutant cette commande en arrière plan, le prompt “revient” immédiatement. De plus Unix, vous indique que le job que vous venez de lancer est le numéro 3, et que son numéro de processus est le 27181 (dans cet exemple).

Le shell garde une trace de tous les jobs en cours d’exécution. La commande jobs permet de les afficher

> jobs
[2] - running evince TDUnixJobs.pdf
[3] + running sleep 6000

Affichage des processus

L’affichage des informations sur les processus se fait par la commande ps:

$ ps
   PID TTY          TIME CMD
  3342 pts/2    00:00:00 bash
  3361 pts/2    00:00:00 sleep
  3362 pts/2    00:00:00 ps
$

On peut ajouter des options à la commande ps et la filtrer avec la commande grep:

$ ps -elf | grep sleep
0 S laurent    3089   2525  0  80   0 -  1803 restar 10:15 pts/0    00:00:00 sleep 6000
0 S laurent    3361   3342  0  80   0 -  1803 restar 11:20 pts/2    00:00:00 sleep 6000
0 S laurent    3365   3342  0  80   0 -  2945 pipe_w 11:25 pts/2    00:00:00 grep --color=auto sleep
$

Et même rajouter l’entête des colonnes:

$ ps -elf | head -1 ; ps -elf | grep sleep
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 S laurent    3089   2525  0  80   0 -  1803 restar 10:15 pts/0    00:00:00 sleep 6000
0 S laurent    3361   3342  0  80   0 -  1803 restar 11:20 pts/2    00:00:00 sleep 6000
0 S laurent    3365   3342  0  80   0 -  2945 pipe_w 11:25 pts/2    00:00:00 grep --color=auto sleep
$

On peut aussi voir ce processus en faisant :

$ ps aux | grep sleep
laurent 27181 0.0 0.0 7308  704 pts/4 SN 15:26 0:00 sleep 6000
laurent 27430 0.0 0.0 14272 964 pts/4 S+ 15:33 0:00 grep sleep
$

Comment faire pour terminer ce job? Il y a plusieurs façons :

$ kill 27181   # En utilisant son pid
$ kill %3      # En utilisant son numéro job
$ fg           # puis <Ctrl-C>

fg ramène le processus à l’avant-plan, il peut être interrompu avec la combinaison CtrlC

Vous pouvez aussi mettre en background une commande que vous venez de lancer, en exécutant

$ sleep 6000
<Ctrl-Z>
ˆZ
[1] + 28640 suspended sleep 6000


$ bg
[1] 28640 continued sleep 6000

Applications de test

Installer le paquet x11-apps et lancer par exemple les commandes suivantes:

Gestion des tâches du système

Utiliser la commande top

GNU-Screen

Présentation

Le programme screen permet d’exécuter des processus dans des terminaux virtuels.

Il permet notamment d’exécuter un processus, de fermer un terminal, puis de retrouver le processus plus tard.

Installation

CentOS

sudo dnf install epel-release -y
sudo dnf install screen

Debian

sudo apt install screen

Utilisation

Télécharger le programme progress_bar sur votre machine en utilisant la commande wget.

Lancement de screen

Exécuter la commande screen

screen

Lancement de progress_bar

Dans le processus screen, exécuter les commandes suivantes:

. progress_bar
progress_bar 120

Détachement du pseudo-terminal

Taper successivement les combinaisons de touches suivantes:

Ctrla puis d

Vous êtes maintenant détaché du processus screen

Afficher la liste des screen en cours d’exécution

screen -ls

Cette commande affiche une sortie du type:

There are screens on:
    80330.pts-0.centos  (Detached)
    50522.pts-3.centos  (Detached)
2 Sockets in /run/screen/S-supv.

Rattacher une session existante

Par exemple, pour rattacher la session screen 80330.pts-0.centos commencer à taper:

screen -r 80

Puis appuyer sur la touche (Tabulation)

La ligne se complète automatiquement.

Appuyer sur la touche (Entrée)

Rattachement à une session déjà attachée

Si une de mes sessions est déjà attachée:

$ screen -ls
There are screens on:
    80330.pts-0.centos  (Attached)
    50522.pts-3.centos  (Detached)
2 Sockets in /run/screen/S-supv.

Je peux m’y connecter en la détachant au préalable.

Pour cela, j’utilise l’option -d :

screen -d -r 80330.pts-0.centos

Faire défiler la sortie d’une commande

Dans screen appuyer sur Ctrla puis appuyer sur la touche [

Sous Windows: [ s’obtient avec la combinaison AltGr5

Sous Mac: [ s’obtient avec la combinaison Alt5

Ensuite, utiliser Ctrld et Ctrlu pour faire défiler l’écran respectivement vers le bas (down) et vers le haut (up)

Appuyer sur q pour quitter le mode défilement

Essayer par exemple d’appeler la commande ls -R /

Mode commande

Dans une session screen taper la séquence de touches Ctrla, :

En mode commande, il est possible d’exécuter différentes commandes spécifiques:

Raccourci Ctrla

Le raccourci Ctrla est utilisé dans un terminal standard pour revenir au début de la ligne.

Il ne fonctionne plus directement dans screen.

Pour le faire fonctionner, utiliser la séquence suivante:

Quitter une session screen

Ctrld ou exit

Alternative à screen

tmux offre une alternative à la commande screen

Le raccourci principal pour utiliser les fonctions de tmux est Ctrlb (au lieu de Ctrla dans screen)