Semplice sincronizzazione tra processi (system call fork, wait ed exit)

Concetti:
Esempio di sincronizzazione tra un processo padre ed un processo figlio. La generazione dei processi è effettuata mediante la system call fork(), mentre per la sincronizzazione sono state utilizzate le system call wait() e exit(). Infine la system call sleep() è stata utilizzata per bloccare il processo figlio per 10 secondi.

Testo:
Realizzare un programma che:

Soluzione:

fork_wait.c
/*
  Realizzare una semplice sincronizzazione tra processi utilizzando:
  - la system call fork per generare un processo figlio
  - le system call wait ed exit per sincronizzare il processo figlio con il processo padre
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>     /* Per system call wait */
#include <unistd.h>       /* Per system call fork */
 
int main()
{
  pid_t pid;
  int status;
 
  pid = fork();             /* Il processo figlio viene creato: da qui in avanti vengono */
                            /* eseguiti in modo concorrente i processi padre e figlio */
 
  if (pid == 0) {           /* Processo figlio: la fork restituisce il valore 0 */
    printf("FIGLIO\n");
    sleep(10);              /* Il figlio attende 10 secondi */
    exit(123);              /* Il figlio termina restituendo al padre il valore 123 */
  } else {                  /* Processo padre: la fork restituisce il pid del figlio */
    printf("PADRE\n");
    wait(&status);          /* Il padre attende la fine del figlio */
 
    if (WIFEXITED(status)){ /* Restituisce valore vero se il figlio e' terminato normalmente */
      printf("STATUS: %d\n", WEXITSTATUS(status)); /* Recupero il valore restituito dal figlio */
    }
 
    printf ("PADRE TERMINATO\n");
  }
 
  printf("DONE\n");
  return (EXIT_SUCCESS);
}