#include #include #include #include #include void sighup(); void sigint(); void sigquit(); void menu_h(void); void menu_s(void); int ha, pha, hb, phb, hc, phc, opt; pid_t hX; int main(void){ if((ha = fork()) < 0) { perror("fork"); exit(1); } else if(ha == 0){ pha=getpid(); hX=getpid(); printf("%d %d\n", getpid(), getppid()); signal(SIGHUP,sighup); signal(SIGINT,sigint); signal(SIGQUIT, sigquit); for(;;); } else if ((hb = fork()) < 0){ perror("fork"); exit(1); } else if (hb == 0){ printf("%d %d\n", getpid(), getppid()); signal(SIGHUP,sighup); signal(SIGINT,sigint); signal(SIGQUIT, sigquit); for(;;); } else if ((hc = fork()) < 0){ perror("fork"); exit(1); } else if (hc == 0){ printf("%d %d\n", getpid(), getppid()); signal(SIGHUP,sighup); signal(SIGHUP,sighup); signal(SIGINT,sigint); signal(SIGQUIT, sigquit); for(;;); }else{ menu_h(); printf("\ta %d b %d c %d", pha, phb, phc); printf("\npadre envia SIGHUP\n\n"); kill(ha,SIGHUP); kill(hb,SIGHUP); printf("\npadre envia SIGINT\n\n"); kill(hc,SIGINT); printf("\npadre envia SIGQUIT\n\n"); kill(ha,SIGQUIT); kill(hb,SIGQUIT); kill(hc,SIGQUIT); } printf("\n"); return 0; } void menu_h(void){ if(1) printf("\n1) hijo a (%d)\n", pha); if(1) printf("2) hijo b (%d)\n", phb); if(1) printf("3) hijo c (%d)\n", phc); printf("- salir\n"); } void menu_s(void){ } void sighup(){ signal(SIGHUP,sighup); /* reset signal */ printf("hijo: recivio SIGHUP %d\n", getpid()); } void sigint(){ signal(SIGINT,sigint); /* reset signal */ printf("hijo: recibio SIGINT\n"); } void sigquit(){ printf("papa mato a %d\n", getpid()); exit(0); }