e2i5 module Unix : programmation sytème en C sous Linux
TP2 : Processus
L’objectif de cette fiche est de se familiariser et de comprendre le comportement des processus à l’aide
(principalement) de la commande fork().
1 Foreground, background, kill
– Utilisez le manuel pour vous documenter, et ensuite utiliser les commandes : ps, top, time, kill, pmap.
– Lancer la commande emacs (ou gedit). En utilisant les commandes appropriées, stopper emacs (attention,
stopper n’est pas tuer), puis relancer–le en tâche de fond.
– Tuer emacs avec la commande kill.
– Que se passe–t–il si vous tuez le processus associé à bash ?
2 Utilisation de fork
– Écrire un programme dont le père va créer 4 fils. Chaque fils devra afficher un message du type "(fils numero
i de pid x) bonjour” au départ de son exécution et un message du type "(fils numero i de pid x) au revoir” à
la fin de son exécution.
– Modifier ce programme pour que le père affiche un message avant la création de chaque fils et signale la fin
de l’exécution de chaque fils.
3 Exec
– En utilisant la fonction exec, exécuter la commande "ls -al”.
– Modifier ce programme pour permettre à l’utilisateur de taper un paramètre à passer à la commande.
– Même question, mais avec un nombre de paramètres non connu à la compilation (il faudra alors utiliser
execv).
4 Arrêt d’un processus
– Créer dans votre répertoire de connexion un nouveau répertoire nommé exo2. Ecrire dans un fichier comp-
teur.c un programme suivant l’algorithme :
– i = 0
– Répéter infiniment :
– i<-i+1
– si i est multiple de 100 000, afficher i et un saut de ligne (
n).
– Lancer l’exécution de ce programme et vérifier qu’il fonctionne. L’arrêter en tapant CTRL-C.
– En utilisant les fonctionnalités du shell (&, fg, bg), lancer quatre instances du programme compteur en même
temps. Mettre au premier plan la troisième, l’arrêter (CTRL-Z) puis la relancer en arrière plan.
– A l’aide des commandes jobs et kill, arrêter tous les compteurs.
– Même question en utilisant les commandes ps et kill (avec un PID).
5 Compréhension d’un programme
On considère le programme suivant. Indiquer le nombre de processus créés, le nombre total de processus, leur
relation de parenté, et l’affichage obtenu (combien de bonjour et de A+ ...).
int main() {
pid_t pid_p = -1;
int i=2;
Polytech 2011 1/ 2