/* signaltest.c Started by Jeff Ondich on 3/26/96 Last modified 16 February 2022 Modified by Tanya Amert for Fall 2024 This program gives a simple example of how a process can catch a signal. Here, SIGINT signals (typically generated by the user hitting CTL-C) are caught. Recall that if you have a PID, you can stop it with the command: kill PID */ #include #include #include const long limit = 2e10; // 20,000,000,000 (2 with 10 zeros) const long frequency = 5e7; // 500,000,000 (5 with 7 zeros) void interrupt_handler(int); int main() { long i; pid_t process_id = getpid(); /* The initial handler for the SIGINT signal is assuredly the default, so confusion will not reign */ if (signal(SIGINT, interrupt_handler) != SIG_DFL) // register for CTRL-C { fprintf(stderr, "I'm confused.\n"); } /* Start counting */ for (i=0; i < limit; i++) { if (i % frequency == 0) { fprintf(stderr, "[PID %d] %ld\n", process_id, i); fflush(stderr); } } return 0; } // Handle registered interrupts void interrupt_handler(int sig) { fprintf(stderr, "Sorry, but I just don't want to quit.\n"); fflush(stderr); }