Cours Unix Fonctionnement canonique d’un shell, tutoriel & guide de travaux pratiques en pdf.
Fonctionnement canonique d’un shell
Un interpréteur de commandes, utilisé de façon interactive, fonctionne en boucle infinie, selon le shéma suivant : 1. Lecture ligne de commandes 2. Interprétation (substitutions…) 3. Clonage du shell avec fork 4. Chez le père : attente du fils avec wait puis retour en 1 Chez le fils : changement de code avec exec puis mort.
Le mécanisme du fork/exec
L’association du fork et de l’exec permet de créer son propre shell : le processus père saisie la commande de l’utilisateur et délègue à son fils l’exécution de la commande.
Les signaux
Les signaux disponibles
Sur un système donné, on dispose de NSIG signaux numérotés de 1 à NSIG. La constante NSIG, ainsi que les ifférents signaux et les prototypes des fonctions qui les manipulent, sont définis dans le fichier <signal.h>.
$grep SIGHUP /usr/include/signal.h #define SIGHUP 1 /* Fin du processus leader de session */ $
Le comportement à la réception d’un signal
Terminologie des signaux
Un signal envoyé par le noyau ou par un autre processus est un signal pendant : cet envoi est mémorisé dans le BCP du processus.
Un signal est délivré (ou pris en compte) lorsque le processus concerné réalise l’action qui lui est associée dans son BCP , c’est à dire, au choix : l’action par défaut : en général la mort du processus ignorer le signal l’action définie par l’utilisateur (handler) : le signal est dit capté.
Un signal peut également être masqué (ou bloqué) : sa prise en compte sera différée jusqu’à ce que le signal ne soit plus masqué.
Limites des signaux
Lorsqu’un processus est en sommeil et qu’il reçoit plusieurs signaux : Aucune mémorisation du nombre de signaux reçus : 10 signaux SIGINT ≡ 1 signal SIGINT. Aucune mémorisation de la date de réception d’un signal : les signaux seront traités ultérieurement par ordre de numéro. Aucun moyen de connaître le PID du processus émetteur du signal.
La délivrance des signaux
Attention, les signaux sont asynchrones : la délivrance des signaux non masqués a lieu un « certain temps » après leur envoi, quand le processus récepteur passe de l’état actif noyau à l’état actif utilisateur. Cela explique pourquoi un processus n’est pas nterruptible lorsqu’il exécute un appel système.
……