#include #include #include #include /* int main(){ int cr, ent=0; if((cr=fork())<0){ perror("erreur exec du fork"); exit(1); } if(cr == 0){ printf("dans le fils, val de ent : %d\n", ent); ent ++; printf("dans le fils, val de ent après incrémentation: %d\n", ent); } else { int r, pid; printf("dans le père, val de ent : %d\n", ent); ent++; printf("dans le père, val de ent après incrémentation: %d\n", ent); if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } } return 0; } int main(){ int fork1, fork2; if((fork1=fork())<0){ perror("erreur exec du fork"); exit(1); } if(fork1 == 0){ printf("dans le fils1, pid: %d\n", getpid()); sleep(2); } else { if((fork2=fork())<0){ perror("erreur exec du fork"); exit(1); } if(fork2 == 0){ printf("dans le fils2, pid: %d\n", getpid()); sleep(4); } else{ int r, pid; printf("dans le père, val de ent : %d\n", getpid()); if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } } } return 0; } */ int main(){ int fils, petitfils; if((fils=fork())<0){ perror("erreur exec du fork"); exit(1); } if(fils == 0){ sleep(2); if((petitfils=fork())<0){ perror("erreur exec du fork"); exit(1); } if(petitfils == 0){ sleep(4); printf("dans le petitfils, pid: %d\n", getpid()); for(;;){} exit(8); } else{ int r, pid; printf("dans le fils, val de ent : %d\n", getpid()); if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } if(WIFEXITED(r)){ printf("Mort normale du fils: %d\n", WEXITSTATUS(r)); }else if( WIFSIGNALED(r)){ printf("Fils mort avec le code: %d\n", WTERMSIG(r)); } exit(2); } } else { int r, pid; printf("dans le père, val de ent : %d\n", getpid()); if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } if(WIFEXITED(r)){ printf("Mort normale du fils: %d\n", WEXITSTATUS(r)); }else if( WIFSIGNALED(r)){ printf("Fils mort avec le code: %d\n", WTERMSIG(r)); } } return 0; }