Código:
#include <stdio.h> #include <signal.h> void hijo1(); void hijo2(); void padrehijo1(); void padrehijo2(); void error(); int main(int argc, char **argv[]) { int pidhijo1; pidhijo1=getpid(); pidhijo1=fork(); switch(pidhijo1) { case 0: hijo1(); break; case -1: error(); break; default: padrehijo1(); } } void hijo1() { /*printf("Soy el hijo 1 %d, y mi padre es %d\n",getpid(),getppid());*/ } void error() { printf("Error al crear el hijo\n"); } void padrehijo1() { int pidhijo2; pidhijo2=getpid(); pidhijo2=fork(); switch(pidhijo2) { case 0: hijo2(); break; case -1: error(); break; default: padrehijo2(); } } void hijo2() { int piiid; piiid=getpid(); pause(); /*printf("Soy el hijo 2 %d, y mi padre es %d\n",getpid(),getppid());*/ } void padrehijo2(int piiid) { int status, wpid1,wpid2; status=wait(wpid1); status=wait(wpid2); kill(piiid,SIGUSR1); printf("Soy el padre!, y ahora va a hablar mi segundo hijo\n"); /*printf("Soy el padre %d, y mi padre es la shell con PID: %d\n",getpid(),getppid());*/ }