Exercice 0 - Familiarisation avec fork(), wait(), waitpid()

  • Problème 0 : Utilisez man pour rechercher des informations sur les fonctions suivantes :
    • fork()
    • wait()
    • waitpid()

Que prennent-ils comme entrée ? Que renvoient-ils en sortie ? De quelles bibliothèques C font-elles partie et quels en-têtes faut-il inclure pour les utiliser ?

Hint

Voir la page 2 du man

exercice 1 - manipuler des processus

  • Problème 0 : Écrivez un programme en C qui génère d'abord un processus enfant. Les deux processus s'affichent ensuite sur la sortie standard avec leur numéro de processus, ainsi que "Je suis le père" et "Je suis l'enfant", respectivement. Attention à éviter les processus zombies !

  • Problème 1 : Lorsque le programme suivant est exécuté, combien d'occurrences de "Hi !" sont imprimées ? Essayez de deviner avant de l'exécuter. Dessinez l'arbre des processus.

#include <stdio.h> 
#include <unistd.h> 
int main() 
{ 
    if (fork() || fork()) 
        fork(); 
    printf("Hi!\n"); 
    return 0; 
} 
Fun

Puisque le parent finit par se terminer, les processus zombies seront hérités par init qui fera un wait() pour les supprimer.

Exercice 2 : Processus et fichiers

  • Problème 0 : Écrire un programme C qui prend un nom de chemin comme argument, ouvre le fichier correspondant et commence par créer un processus enfant. Le parent et l'enfant écrivent ensuite leurs identifiants de processus dans le fichier. Pouvez-vous deviner comment les chaînes seront écrites dans le fichier : se chevauchent-elles ? Si ce n'est pas le cas, dans quel ordre seront-elles écrites ?

  • Problème 1 : Écrire un programme C qui prend un nom de chemin en entrée, ouvre le fichier correspondant, puis crée un processus enfant. Les deux processus essaient alors d'écrire respectivement "Je suis le père avec le PID X" et "Je suis le fils avec le PID X" (avec X remplacé par le PID respectif), au début du fichier. Pouvez-vous deviner quelle chaîne de caractères sera écrite ?

Devoir de déposer avant le lundi 5/02/2024 23:00 (GMT+1)

  • Problème 0 : Ecrivez un programme C qui prend en entrée un nom de chemin, ouvre d'abord un flux FILE en utilisant le nom de chemin correspondant, puis crée N processus enfants (où N est une constante entière positive). Chaque processus enfant doit ensuite écrire son ID de processus sur une nouvelle ligne de ce fichier. Enfin, le père doit lire tous les PIDs dans le fichier et afficher sur la sortie standard la chaîne "Mes enfants sont:\n" suivie des PID, un par ligne.

Site built with MkDocs and a slightly-modified version of Terminal for MkDocs.
Last update: September 2023