All pastes #26337 Raw Edit

Mine

public text v1 · immutable
#26337 ·published 2005-10-23 00:38 UTC
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 */