/* * ovenSigHandler: * setupSigHandlers: * Something has happened that would normally terminate the program so make * sure the oven is turned off and exit anyway. ********************************************************************************* */ void ovenSigHandler (int sig) { turnOvenOff () ; ledOff () ; printf ("\n") ; printf ("Oven controller exiting on signal %d\n", sig) ; exit (0) ; } void setupSigHandler (void) { struct sigaction action ; sigemptyset (&action.sa_mask) ; action.sa_flags = 0 ; // Ignore what we can action.sa_handler = SIG_IGN ; sigaction (SIGHUP, &action, NULL) ; sigaction (SIGTTIN, &action, NULL) ; sigaction (SIGTTOU, &action, NULL) ; // Trap what we can to exit gracefully action.sa_handler = ovenSigHandler ; sigaction (SIGINT, &action, NULL) ; sigaction (SIGQUIT, &action, NULL) ; sigaction (SIGILL, &action, NULL) ; sigaction (SIGABRT, &action, NULL) ; sigaction (SIGFPE, &action, NULL) ; sigaction (SIGSEGV, &action, NULL) ; sigaction (SIGPIPE, &action, NULL) ; sigaction (SIGALRM, &action, NULL) ; sigaction (SIGTERM, &action, NULL) ; sigaction (SIGUSR1, &action, NULL) ; sigaction (SIGUSR2, &action, NULL) ; sigaction (SIGCHLD, &action, NULL) ; sigaction (SIGTSTP, &action, NULL) ; sigaction (SIGBUS, &action, NULL) ; }