C Signal Handling – Working with Signals in C
In C, signal handling is used to catch signals sent to a program, such as a termination signal or an interrupt. The signal.h library allows you to define custom signal handlers for various system events.
๐น What are Signals?
Signals are notifications sent to a process to notify it of events that require attention. Examples include interruptions, errors, or termination requests. Signals can be sent by the system or other processes.
๐ Syntax for Signal Handling
To handle signals in C, you use the signal() function. The syntax is as follows:
signal(signal_number, signal_handler_function);
signal_number: The signal you want to catch (e.g.,SIGINT,SIGTERM).signal_handler_function: A function that will handle the signal.
๐ Example 1: Handling SIGINT (Ctrl+C)
This example demonstrates how to catch the SIGINT signal, which is triggered when the user presses Ctrl+C to interrupt the program.
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void signal_handler(int signal) {
printf("Caught signal %d: Interrupt signal (SIGINT) received.\n", signal);
exit(0); // Exit the program after handling the signal
}
int main() {
signal(SIGINT, signal_handler); // Catch SIGINT (Ctrl+C)
while (1) {
printf("Running... Press Ctrl+C to stop.\n");
sleep(1); // Wait for 1 second before printing again
}
return 0;
}
๐น Explanation
signal_handler(): The function that handles theSIGINTsignal.signal(SIGINT, signal_handler);: Registers the signal handler to catch theSIGINTsignal.- The program continues running until the user presses Ctrl+C, at which point the signal handler is invoked and the program exits.
๐ Example 2: Handling SIGTERM (Termination Signal)
This example demonstrates how to handle the SIGTERM signal, which is commonly used to terminate a process.
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void signal_handler(int signal) {
printf("Caught signal %d: Termination signal (SIGTERM) received.\n", signal);
exit(0); // Exit the program after handling the signal
}
int main() {
signal(SIGTERM, signal_handler); // Catch SIGTERM
while (1) {
printf("Running... Send SIGTERM to terminate.\n");
sleep(1); // Wait for 1 second before printing again
}
return 0;
}
๐ฏ Key Takeaways
- Signals are used to notify a process about events like interrupts or terminations.
- The
signal()function is used to catch and handle signals in C. - Common signals include
SIGINT(Ctrl+C),SIGTERM(Termination), and many others.
๐ Practice Time!
Try modifying the signal handler function and experiment with different signals to better understand how signal handling works in C!