Atelier 6 - Les processus

Objectif

  1. Créer les scripts bash séquentiels suivants:

a. Script 1 : afficher le nombre de fichiers par type

  1. Créer un script bash concurrent (avec sous-processus)

a. Script 2 : ré-écrire le script ci-haut avec des sous-processus (&)

  1. Comparer les temps d’exéction d’un script séquentiel Vs concurrent

Note

Dans ce cours, un script est un fichier .sh contenant des commandes

Remise

Vous devez remettre et faire valider au courant des 2 prochaines séances.

À remettre sur Moodle:

  • Vos deux fichiers .sh

  • Vos captures d’écran

Captures d’écran:

Fichier Contenu Annotations
01_nombre_par_type.png Appel à nombre_par_type.sh et résultat Votre nom d’usager Linux
03_proc.png Appel à nombre_par_type_proc.sh Votre nom d’usager Linux
04_temps.png Temps d’exécution séquentiel Vs concurrent Votre nom d’usager Linux

Astuces

Stocker une valeur dans une variable

$ nb=$(ls | wc -l)

Cette commande stocke le nombre de fichiers dans la variable nb.

Tester la valeur d’une variable

Pour comparer la valeur d’une variable à un chiffre :

$ test $nb -eq 10

Cette commande compare nb à 10. Si les deux sont égaux alors le code de retour de la commande test sera 0 sinon il sera différent de 0.

On peut alors écrire :

$ test $nb -eq 10 && echo "Les deux valeurs sont égales" || echo "Les deux
valeurs sont différente"

Parcourir une variable à l’aide d’une boucle for

Vous disposez de la varieble serveurs et vous souhaitez la parcourir :

$ serveurs="google.com facebook.com youtube.com"
$ for i in $serveurs; do echo $i; done

Créer le script nombre_de_fichiers.sh

À inclure au début du script

types="java conf txt png tiff"

Spécification

Pour chaque $types de fichiers, afficher:

  1. le nombre de fichiers de ce type

  2. si 0, afficher: Il n’y aucun fichier $type

  3. (aucun autre affichage)

Exemple de sortie

Décompte des fichiers java conf txt png tiff

Il y a 50718  fichiers .java
Il y a 1171   fichiers .conf
Il y a 6999   fichiers .txt
Il y a 67296  fichiers .png
Il n'y a aucun fichier .tiff

Créer le script nombre_par_type_proc.sh

Spécification

  1. Fait la même chose que ci-haut, mais utilise & pour le faire en arrière plan

  2. Les commandes find s’exécutent en même temps

Attendre la fin de tous les processus

  1. À chaque processus lancé, sauvegarder sont pid (p.ex. l’ajouter à un fichier)
  • IMPORTANT: utiliser (CMD1;CMD2;…)& pour créer un sous-processus

  • IMPORTANT: sauvegarder le pid tout de suite après l’utilisation de &

  1. À la fin du script, s’assurer de faire wait sur chacun de ces pids

  2. De cette façon: le script attend la fin de chacun des sous-processus avant de quitter

Exemple de sortie (pour nombre_par_type_proc.sh)

Décompte des fichiers java conf txt png tiff


[Démarrage des processus]

Il y a 1171     fichiers .conf
Il n'y a aucun  fichier .tiff
Il y a 67296    fichiers .png
Il y a 50718    fichiers .java
Il y a 6999     fichiers .txt

[Arrêt des processus]

Analyse de temps d’exécution séquentiel Vs concurrent

  1. À l’aide de time CMD, analyser les temps d’exécution

Exemple pour nombre_par_type.sh

$ time bash nombre_par_type.sh 

Décompte des fichiers java conf txt png tiff

Il y a 50718    fichiers .java
Il y a 1171     fichiers .conf
Il y a 6999     fichiers .txt
Il y a 67296    fichiers .png
Il n'y a aucun  fichier .tiff



real    0m11,009s
user    0m4,543s
sys     0m6,395s


$ time bash nombre_par_type_proc.sh 

Décompte des fichiers java conf txt png tiff


[Démarrage des processus]

Il y a 50718    fichiers .java
Il y a 6999     fichiers .txt
Il y a 67296    fichiers .png
Il n'y a aucun  fichier .tiff
Il y a 1171     fichiers .conf

[Arrêt des processus]


real    0m3,196s
user    0m5,797s
sys     0m7,622s

Expliquer la différence de temps d’exécution

  1. Le temps real est le temps écoulé dans la vrai vie

  2. Le temps CPU est la somme de user et sys

  • NOTE: user est le temps CPU de vos processus

  • NOTE: sys est le temps CPU des appels au noyau