Programmation syst`eme
TP n2 : Les processus
Un peu de g´en´ealogie
R´ecup´erez le programme “mesforks.c”. Compilez-le, ex´ecutez-le... et r´epondez aux questions suivantes :
Combien de processus sont-ils cr´es lors de l’ex´ecution de ce programme ?
Quels sont leurs liens de parent´e ?
(dessinez l’arbre g´en´ealogique de tous les processus cr´e´es par ce programme)
Observez l’ordre d’affichage sur plusieurs ex´ecutions ? Que constatez-vous ? Qu’en d´eduisez-vous par rapport
au comportement de la fonction printf ? de l’ordonnancement des processus ? Quel impact sur vos pratiques
de debuggage ?
Votre Shell 1 : version interactive, ex´ecution de commandes externes
Ecrivez un programme qui simule le comportement d’un interpr´eteur de commandes Shell : ce programme boucle
`a l’infini sur les deux actions suivantes :
1. Saisie d’une commande
2. Ex´ecution de la commande saisie
Remarques :
Votre programme devra cr´eer un nouveau processus pour chaque commande `a ex´ecuter.
Votre programme ne devra pas cr´eer de zombies...
Si la commande saisie n’existe pas, votre programme devra afficher un message d’erreur appropri´e.
Si la commande est vide (l’utilisateur a tap´e retour-chariot), alors votre programme devra simplement
r´eafficher le prompt de saisie, sans afficher de message d’erreur.
Pour saisir une commande, et la d´ecouper en “mots”, vous pouvez utiliser la fonction ligneCommande() qui
se trouve dans le fichier “ligneCommande.c”.
Votre Shell 2 : environnement
Tout processus poss`ede un environnement qui est une liste de variables poss´edant un nom (traditionnellement en
majuscules) et une valeur (chaˆıne de caract`eres). Cet environnement peu ˆetre affich´e par la commande env .
Comme toutes les propri´et´es d’un processus, l’environnement est h´erit´e par les processus fils.
On vous demande de modifier votre interpr´eteur de commande de sorte que, si la variable d’environnement INVITE
est d´efinie, c’est sa valeur qui sera affich´ee en guise d’invite.
Afin de pouvoir modifier l’invite (ou n’importe quelle variable d’environnement) en cours d’utilisation, on vous
demande de faire en sorte que, lorsque la ligne de commande commence par le mot setenv , les deux arguments
suivants soient interpr´et´es comme un nom de variable d’environnement et sa valeur. Vous devez alors cr´eer ou
modifier la variable d’environnement correspondante.
Votre Shell 3 : tˆaches de fond
En Shell, on peut lancer une commande en tˆache de fond, en particulier lorsque l’on ne souhaite pas monopoliser
l’interpr´eteur pour cette commande, et que l’on veut pouvoir lancer d’autres commandes en parall`ele. Pour cela,
on fait suivre la ligne de commandes d’un “&”.
Il s’agit maintenant d’inegrer cette fonctionnalit´e `a votre programme :
Lorsque la ligne de commande saisie commence par le mot “tf” (tˆache de fond), alors la commande suivant
tf sera lanc´ee dans un nouveau processus, mais votre programme n’attendra pas la fin de l’ex´ecution et il
r´eaffichera imm´ediatement le prompt de saisie pour saisir et ex´ecuter la commande suivante.
1
Lorsque la ligne de commande saisie ne commence pas par le mot “tf”, la commande correspondante sera
ex´ecut´ee, et votre programme attendra la fin de l’ex´ecution pour r´eafficher le prompt de saisie.
Lorsqu’une commande lanc´ee en tˆache de fond se termine, votre programme affichera un message indiquant
la fin du processus (avec son num´ero de pid).
Attention encore `a ne pas cr´eer de zombies...
Votre Shell 4 : redirection d’entr´ees/sorties
On souhaite `a pr´esente ˆetre capables de rediriger les entr´ees et les sorties de notre shell, `a la mani`ere de bash avec
>et <.
Vous allez donc ajouter cette derni`ere fonctionnalit´e `a votre programme, en utilisant deux mots cl´es :
from, qui sera suivi du nom du fichier dans lequel votre interpr´eteur lira ses commandes ;
to, qui sera suivi du nom du fichier dans lequel votre interpr´eteur ´ecrira sa sortie.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !