Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- int main(){
- int primoFiglio, secondoFiglio, status;
- if((primoFiglio = fork()) < 0){
- perror("Errore fork");
- exit(EXIT_FAILURE);
- }
- if(primoFiglio == 0){ //il primo figlio crea un suo figlio (il nipote)
- if((secondoFiglio = fork()) < 0){
- perror("Errore fork");
- exit(EXIT_FAILURE);
- }
- if(secondoFiglio > 0){ //il primo figlio ma non il nipote
- exit(27); //27 solo per vedere se funziona
- }
- //a questo punto il nipote è senza padre quindi orfano
- if (secondoFiglio == 0){ //a questo punto definisco un codice per il demone creato
- //può essere una exec ma per comodità ho usato uno sleep
- //così dopo un po il demone termina la sua vita
- printf("Ciao sono il nipote, pid: %d, mio padre ha il pid: %d\n", getpid(), getppid());
- sleep(600);
- exit(0);
- }
- }
- if(primoFiglio > 0){ //il nonno
- //aspetto che finisca il figlio
- int tempPid = waitpid(primoFiglio, &status, 0); //primo figlio deve essere uguale a tempPid
- printf("Ha finito il figlio: %d con codice: %d\n", tempPid, WEXITSTATUS(status));
- exit(0); //il padre finisce e non aspetta il nipote che è ormai uno demone (orfano)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement