1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <stdio.h> #include <signal.h> #include <stdlib.h> #include <fcntl.h> /* manejador señales en proceso padre (handler)*/ void gestion_padre (int segnal) { printf ("Padre recibe señal...%d\n",segnal); } /* manejador señales en proceso hijo (handler)*/ void gestion_hijo (int segnal) { printf ("Hijo recibe señal...%d\n",segnal); } int main(){ int pid_padre,pid_hijo; pid_padre=getpid(); pid_hijo=fork(); // se crea al hijo switch(pid_hijo){ case -1: printf("Error al crear proceso hijo..\n"); exit(-1); case 0: //hijo signal(SIGUSR1,gestion_hijo); // tratamiento señal en proceso hijo while (1) { sleep(1); kill(pid_padre,SIGUSR1); // señal a padre } break; default: //padre signal(SIGUSR1,gestion_padre); // tratamiento señal en proceso padre while (1) { pause(); // padre espera hasta recibir señal hijo (se ejecutar primero) sleep(1); kill(pid_hijo,SIGUSR1); // señal a hijo } break; } return 0; } |