Accueil
 1  Licence
 2  Prologue
 3  Système d'exploitation, système d'exploitation Unix
 4  Première utilisation
 5  Système de fichiers
 6  Shell
 7  Processus
 7.1  Caractéristiques d'un processus
 7.2  Arborescence des processus
 7.3  Commande ps
 7.4  Commandes pstree et top
 7.5  Processus en avant-plan et en arrière-plan
 7.6  Suspension et reprise d'un processus
 7.7  Suppression d'un processus
 7.8  Vision utilisateur des états d'un processus
 7.9  Shell et processus *
 7.10  Conclusion
 8  Quelques outils supplémentaires
 9  Communications sous Unix
 10  Épilogue: Rappels importants
 Index
 Glossaire
 Foire Aux Questions
 Aide

 Contacts

W3C validator

Département INF  
 Initiation à UNIX


7.9 Shell et processus *

  • Le shell est un langage de programmation dont les programmes sont appelés shell-script. En tant que langage de programmation, le shell utilise des variables, des paramètres, des fonctions, des structures de contrôle...
  • Quand le shell crée un processus pour exécuter une commande, le processus enfant hérite d’une copie de l’environnement du processus parent.
  • Par défaut, les variables du processus parent ne se trouvent pas dans l’environnement. Ces variables sont dites locales. Pour les rendre globales, c.-à-d. les mettre dans l’environnement, il faut les exporter en utilisant export.
  • Il est possible d’exécuter un shell-script dans un processus enfant:  
    problème génération shellcmds verbatim
  • Il est aussi possible d’exécuter un shell-script dans le processus du shell courant:  
    problème génération shellcmds verbatim
    • Ceci est souvent utilisé pour prendre en compte les modifications dans les fichiers de configuration du shell (abordés en section 6):
      • . .bashrc
    • Les fonctions « . » et source sont équivalentes pour le shell bash.

    previous     next 


Polycopié de cours Commentaires de cette page dans le polycopié de cours

 
N’essayez de faire cet exercice que si vous maîtrisez le contenu de la section sur le shell ainsi que le contenu des autres pages de cours sur les processus ! Les réponses aux questions sont mises en notes de bas de page.

  1. Vérifiez que la variable PATH contient bien le répertoire courant (« . ») et si ce n’est pas le cas, ajoutez-le13.
  2. Créez et affectez (à la valeur que vous choisirez) une variable de nom jour14.
  3. Créez, affectez (à la valeur que vous choisirez) et exportez une variable de nom mois15.
  4. Créez dans votre répertoire ~/UX/Langage un fichier de nom variables.bash avec la commande cat ou avec emacs contenant les lignes suivantes:
    1. L’indication que le shell utilisé doit être bash: #! /bin/bash
    2. La création et l’affectation (à la valeur que vous choisirez) d’une variable de nom annee16
    3. L’affichage des contenus des trois variables précédemment créées: jour, mois et annee17
  5. Exécutez les commandes suivantes:
    1. Fixez les droits rw- pour le propriétaire du fichier variables.bash18.
    2. Exécutez la commande « variables.bash » et expliquez le message affiché19.
    3. Exécutez la commande « bash variables.bash » et expliquez le résultat affiché20.
    4. Exécutez la commande « echo $mois , $annee » et expliquez le résultat affiché21.
    5. Exécutez la commande « . variables.bash » (attention au point en début de commande)22.
    6. Exécutez la commande « echo $mois , $annee » et expliquez le résultat affiché23.
    7. Supprimez la variable annee24.
    8. Ajoutez le droit d’exécution pour le fichier variables.bash25.
    9. Exécutez la commande « variables.bash » et expliquez le résultat affiché26.
    10. Exécutez la commande « echo $mois , $annee » et expliquez le résultat affiché27.


Question: Règle des 3 bouées
Auto-évaluation: pas compris pas sûr de comprendre compris

INF, Télécom SudParis, CSC 3001, Sept. 2014

13.echo $PATH affiche une chaîne de caractères de plusieurs champs séparés par le caractère deux points (« : »). L’un de ces champs doit être le répertoire courant (« . »). Si ce n’est pas le cas, on l’ajoute avec la commande suivante : « PATH=$PATH:. », Attention au point après les deux points !

14.jour=01

15.export mois=janvier

16.annee=2004

17.echo $jour $mois $annee

18.chmod u=rw variables.bash

19.Le fichier variables.bash n’ayant pas le droit d’exécution, le shell refuse de l’exécuter, même si c’est un shell-script.

20.La commande bash permet de lancer un sous-shell qui exécute le shell-script passé en argument, et ce quelle que soit la valeur du droit x du fichier. Le shell-script est exécuté dans un nouveau processus et affiche les valeurs des variables mois et annee créées. La variable jour n’ayant pas été exportée, elle n’est pas connue dans le processus enfant exécutant le shell-script. Enfin, le shell-script se termine, faisant terminer le processus du sous-shell, qui à son tour fait disparaître avec lui la variable annee.

21.La variable annee créée dans le sous-shell n’existe pas dans le shell d’origine, dit de connexion. Il n’y a donc pas d’affichage de l’année.

22.La fonction « . » du shell permet de lancer un sous-shell qui exécute le shell-script passé en argument, ce quelle que soit la valeur du droit x du fichier. Le shell-script est exécuté dans le processus du shell courant et affiche les valeurs des variables jour, mois et annee créées. Enfin, le shell-script se termine, ne faisant pas disparaître avec lui les variables mois et annee car elles ont été créées par une fonction suite à l’appel de la fonction « . ».

23.La variable annee créée par le shell-script existe toujours. Les mêmes valeurs sont affichées.

24.unset annee

25.chmod u+x variables.bash

26.Cette fois-ci, le fichier possédant le droit x, le shell-script s’exécute dans un nouveau processus et affiche les valeurs des variables mois et annee. La variable jour n’ayant pas été exportée, elle n’est pas connue dans le processus enfant exécutant le shell-script. Enfin, le shell-script se termine, faisant terminer le processus du sous-shell, qui à son tour fait disparaître avec lui la variable annee.

27.La variable annee créée dans le sous-shell n’existe pas dans le shell d’origine. Il n’y a donc pas d’affichage de l’année.