rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
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 */