Advertisement
LeonidR

Esercizio 2 Lezione 2 - SO - 2013/2014

Nov 16th, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4.  
  5. int main(){
  6.     int primoFiglio, secondoFiglio, status;
  7.  
  8.     if((primoFiglio = fork()) < 0){
  9.         perror("Errore fork");
  10.         exit(EXIT_FAILURE);
  11.     }
  12.  
  13.     if(primoFiglio == 0){   //il primo figlio crea un suo figlio (il nipote)
  14.         if((secondoFiglio = fork()) < 0){
  15.             perror("Errore fork");
  16.             exit(EXIT_FAILURE);
  17.         }
  18.  
  19.         if(secondoFiglio > 0){  //il primo figlio ma non il nipote
  20.             exit(27);   //27 solo per vedere se funziona
  21.         }
  22.         //a questo punto il nipote è senza padre quindi orfano
  23.  
  24.         if (secondoFiglio == 0){    //a questo punto definisco un codice per il demone creato
  25.                         //può essere una exec ma per comodità ho usato uno sleep
  26.                         //così dopo un po il demone termina la sua vita
  27.             printf("Ciao sono il nipote, pid: %d, mio padre ha il pid: %d\n", getpid(), getppid());
  28.             sleep(600);
  29.             exit(0);
  30.         }
  31.     }
  32.    
  33.     if(primoFiglio > 0){ //il nonno
  34.         //aspetto che finisca il figlio
  35.         int tempPid = waitpid(primoFiglio, &status, 0); //primo figlio deve essere uguale a tempPid
  36.         printf("Ha finito il figlio: %d con codice: %d\n", tempPid, WEXITSTATUS(status));
  37.        
  38.         exit(0); //il padre finisce e non aspetta il nipote che è ormai uno demone (orfano)
  39.     }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement