Programmation syst`eme
TP n◦2 : 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´e´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’int´egrer 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