#include "main.h" //====================================================================== /* $ ps aux # a:all users, u:detailled, x:daemons // look at bash PID */ //====================================================================== int main(int argc, char **argv) { int ok; int value=100; printf("before fork, pid=%d, ppid=%d, value=%d (%p)\n", getpid(),getppid(),value,(void *)&value); pid_t child=fork(); //>>>>>>>> CREATE CHILD >>>>>>>>>>>>>>>>>>>>>>>> switch(child) { case -1: perror("fork"); return EXIT_FAILURE; break; //############ CHILD CODE ###################################### case 0 : value+=10; printf("after fork in the child, child=%d, pid=%d, ppid=%d, value=%d (%p)\n", child,getpid(),getppid(),value,(void *)&value); sleep(10); break; //############ PARENT CODE ##################################### default : value+=1000; printf("after fork in the parent, child=%d, pid=%d, ppid=%d, value=%d (%p)\n", child,getpid(),getppid(),value,(void *)&value); int status; pid_t p=waitpid(child,&status,0); // PARENT MUST WAIT FOR HIS CHILD if(p==-1) { perror("waitpid"); return EXIT_FAILURE; } if (WIFEXITED(status)) { printf(" Child ended normaly .\n" " Return code : %d.\n", WEXITSTATUS(status)); } if (WIFSIGNALED(status)) { printf(" Child didn't end normaly.\n" " killed by signal : %d.\n", WTERMSIG(status)); } break; } return EXIT_SUCCESS; } //^^^^^^^^^^^^^^^^^^^^^^^^^^ EOF ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^