#include #include #include #include #include extern int errno; void usr1(int sig) ; void usr2(int sig) ; void hup(int sig) ; void intr(int sig); int loop=1; pid_t mypid; int counter=0; main () { char buf[100]; int len; mypid = getpid(); if ( SIG_ERR == signal(SIGUSR1, usr1)) { perror("Unable to set signal handler"); } if ( SIG_ERR == signal(SIGUSR2, usr2)) { perror("Unable to set signal handler"); } if ( SIG_ERR == signal(SIGHUP, hup)) { perror("Unable to set signal handler"); } if ( SIG_ERR == signal(SIGINT, intr)) { perror("Unable to set signal handler"); } printf("The process (%d) is set for a USR1, USR2, HUP, INT\n",mypid); while (loop) { } printf("Out of the loop, type something in\n"); doover: len = read(0,buf,100); buf[len-1]='\0'; printf("We were able to read a <%s>, len = %d\n",buf,len); if (errno == EINTR) { errno = 0; printf("In doover loop\n"); goto doover; } } void usr1(int sig){ printf("In usr1, got %d\n",sig); if ( SIG_ERR == signal(SIGUSR1,SIG_DFL)) { perror("Unable to set signal handler"); } raise(SIGUSR1); } void usr2(int sig){ printf("In usr2, got %d\n",sig); printf (" Resetting SIGUSR2 handler \n"); if ( SIG_ERR == signal(SIGUSR2, usr2)) { perror("Unable to set signal handler"); } } void hup(int sig){ printf("In hup, got %d\n",sig); printf (" Resetting SIGHUP handler \n"); kill (mypid,sig); printf("counter=%d\n",counter++); if ( SIG_ERR == signal(SIGHUP, hup)) { perror("Unable to set signal handler"); } printf("counter=%d\n",counter--); } void intr(int sig){ printf("In intr, got %d\n",sig); loop=0; }