#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t f1, f2, f3, f4;
int status;
printf("Je suis le processus père P (PID = %d)\n", getpid());
f1 = fork();
if (f1 == 0) {
printf("Je suis le fils F1\n");
exit(1);
}
else {
f2 = fork();
if (f2 == 0) {
printf("Je suis le fils F2\n");
f3 = fork();
if (f3 == 0) {
sleep(2);
printf("Je suis le fils F3 pid = %d, père = %d)\n", getpid(), getppid());
exit(3);
}
else {
f4 = fork();
if (f4 == 0) {
sleep(4);
printf("Je suis le fils F4\n");
exit(4);
}
else {
waitpid(f3, &status, 0);
printf("Le fils F3 (PID = %d) s'est terminé avec état %d\n", f3, status);
waitpid(f4, &status, 0);
printf("Le fils F4 (PID = %d) s'est terminé avec état %d\n", f4, status);
exit(2);
}
}
}
else {
waitpid(f1, &status, 0);
printf("Le fils F1 (PID = %d) s'est terminé avec état %d\n", f1, status);
waitpid(f2, &status, 0);
printf("Le fils F2 (PID = %d) s'est terminé avec état %d\n", f2, status);
exit(0);
}
}
}