Exercice 1:
Écrivez un programme en C qui effectue les opérations suivantes :
✓ Le programme doit créer deux processus fils à l'aide de la fonction fork ().
o Le premier processus fils doit exécuter la commande /usr/bin/chage pour afficher
des informations sur le statut du mot de passe de l'utilisateur. Cela inclut des détails
tels que la dernière modification du mot de passe et la date d'expiration. Utilisez la
fonction execl() avec les paramètres suivants :
execl("/usr/bin/chage", ".......", "........", getenv("USER"), NULL);
o Le deuxième processus fils doit exécuter la commande /bin/passwd pour permettre
à l'utilisateur de changer son mot de passe. Utilisez la fonction execl () avec les
paramètres suivants :
execl("........", "passwd", NULL);
✓ Synchronisation : Le programme parent doit attendre que les deux processus fils se
terminent avant de quitter. Utilisez la fonction waitpid(........) pour assurer cette
synchronisation.
Exercice 2:
Écrire un programme en C qui simule un processus parent gérant deux processus fils. Le processus
parent crée deux fils à l'aide de fork().
Le Fils 1 s'exécute pendant une période déterminée.
Ensuite, le Fils 2 envoie un signal de suspension à Fils 1 en utilisant kill() avec le signal SIGSTOP, puis
exécute la commande ps pour afficher l'état de Fils 1 après sa suspension.
Après quelques secondes d'attente, Fils 2 envoie un signal à Fils 1 pour qu'il reprenne son exécution à
l'aide du signal SIGCONT.
Une fois que Fils 1 a terminé son exécution, le parent attend la terminaison des deux fils, puis se
termine à son tour."
Processus père
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
.................................
Processus fils-1
// Simuler un travail pendant quelques secondes
for (int i = 0; i < 5; i++) {
printf("Fils 1: Je fais mon travail... (%d)\n", i +
1);
sleep(1); // Simuler une tâche
Processus fils-2
.................... // Attendre un peu avant de suspendre le Fils 1
kill(..........,.........); // Suspendre Fils 2
// Exécuter la commande 'ps -el | grep <pid_fils2>' pour
vérifier l'état
char command[50];
snprintf(command, sizeof(command), "ps -el | grep %d",
pid_fils1);
system(command);
sleep(5);
// Reprendre Fils 1
Processus père
// Attendre la fin de Fils 1
// Attendre la fin de Fils 2