In the C Standard Library, signal processing defines how a program handles various signals while it executes. A signal can report some exceptional behavior within the program (such as division by zero), or a signal can report some asynchronous event outside the program (such as someone striking an interactive attention key on a keyboard).
The C standard defines only 6 signals. They are all defined in signal.h
header (csignal
header in C++):
Additional signals may be specified in the signal.h
header by the implementation. For example, Unix and Unix-like operating systems (such as Linux) define more than 15 additional signals; see Unix signal.
A signal can be generated by calling raise()
or kill()
system calls. raise()
sends a signal to the current process, kill()
sends a signal to a specific process.
A signal handler can be specified for all but two signals (SIGKILL and SIGSTOP cannot be caught, blocked or ignored). A signal handler is a function which is called by the target environment when the corresponding signal occurs. The target environment suspends execution of the program until the signal handler returns or calls longjmp()
. For maximum portability, an asynchronous signal handler should only:
If the signal reports an error within the program (and the signal is not asynchronous), the signal handler can terminate by calling abort()
, exit()
, or longjmp()
.