In the
C Standard Library, signal processing defines how a program handles various
signals
In signal processing, a signal is a function that conveys information about a phenomenon. Any quantity that can vary over space or time can be used as a signal to share messages between observers. The ''IEEE Transactions on Signal Processing'' ...
while it executes. A signal can report some exceptional behavior within the program (''such as
division by zero
In mathematics, division by zero is division where the divisor (denominator) is zero. Such a division can be formally expressed as \tfrac, where is the dividend (numerator). In ordinary arithmetic, the expression has no meaning, as there is ...
''), or a signal can report some asynchronous event outside the program (''such as someone striking an
interactive attention key on a keyboard'').
Standard signals
The C standard defines only 6 signals. They are all defined in
signal.h
header (
csignal
header in
C++
C++ (pronounced "C plus plus") is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significan ...
):
*
SIGABRT
– "abort", abnormal termination.
*
SIGFPE
–
floating point exception.
*
SIGILL
– "illegal", invalid instruction.
*
SIGINT
– "interrupt", interactive attention request sent to the program.
*
SIGSEGV
– "
segmentation violation", invalid memory access.
*
SIGTERM
– "terminate", termination request sent to the program.
Additional signals may be specified in the
signal.h
header by the implementation. For example, Unix and
Unix-like
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
operating systems (such as
Linux
Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, w ...
) define more than 15 additional signals; see
Unix signal
The asterisk ( ), from Late Latin , from Ancient Greek , ''asteriskos'', "little star", is a typographical symbol. It is so called because it resembles a conventional image of a heraldic star.
Computer scientists and mathematicians often vo ...
.
Debugging
*
SIGTRAP
for debugging purposes. It's platform-dependent and may be used on
Unix
Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, an ...
-like operating systems.
Handling
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 is a
function
Function or functionality may refer to:
Computing
* Function key, a type of key on computer keyboards
* Function model, a structured representation of processes in a system
* Function object or functor or functionoid, a concept of object-oriente ...
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()
.
Signal handlers can be set with
signal()
or
sigaction()
. The behavior of
signal()
has been changed multiple times across history and its use is discouraged.
[https://man7.org/linux/man-pages/man2/signal.2.html Signal(2) manpage] It is only portable when used to set a signal's disposition to SIG_DFL or SIG_IGN. Signal handlers can be specified for all but two signals (
SIGKILL
Signals are standardized messages sent to a running program to trigger specific behavior, such as quitting or error handling. They are a limited form of inter-process communication (IPC), typically used in Unix, Unix-like, and other POSIX-comp ...
and
SIGSTOP
In Unix and Unix-like operating systems, job control refers to control of jobs by a shell, especially interactively, where a "job" is a shell's representation for a process group. Basic job control features are the suspending, resuming, or termi ...
cannot be caught, blocked or ignored).
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()
.
Functions
Example usage
#include
#include
#include
static void catch_function(int signo)
int main(void)
See also
*
Unix signal
The asterisk ( ), from Late Latin , from Ancient Greek , ''asteriskos'', "little star", is a typographical symbol. It is so called because it resembles a conventional image of a heraldic star.
Computer scientists and mathematicians often vo ...
References
{{Reflist
C standard library