Description | Invalid memory reference | ||||
---|---|---|---|---|---|
Default action | Abnormal termination of the process | ||||
SA_SIGINFO macros | |||||
|
On POSIX-compliant platforms, SIGSEGV
is the signal sent to a process when it makes an invalid memory reference, or segmentation fault. The symbolic constant for SIGSEGV
is defined in the header file signal.h
. Symbolic signal names are used because signal numbers can vary across platforms; in practice it is usually signal number 11.[1]
Contents |
SIG
is a common prefix for signal names; SEGV
is an abbreviation of segmentation violation.
Computer programs may throw SIGSEGV
for improper memory handling (see segmentation fault). The operating system may inform the application of the nature of the error using the signal stack, which developers can use to debug their programs or handle errors.
The default action for a program upon receiving SIGSEGV
is abnormal termination. This action will end the process, but may generate a core file to aid debugging, or perform some other platform-dependent action. For example, Linux systems using the grsecurity patch may log SIGSEGV
signals in order to monitor for possible intrusion attempts using buffer overflows.
SIGSEGV
can be caught; that is, applications can request what action they want to occur in place of the default. Examples of such action might be ignoring it, calling a function, or restoring the default action. In some circumstances, ignoring SIGSEGV
results in undefined behavior.[2]
An example of an application that might handle SIGSEGV
is a debugger, which might check the signal stack and inform the developer of what happened, and where the program terminated.
SIGSEGV
is usually generated by the operating system, but users with appropriate permissions can use the kill
system call or kill command (a userland program, or sometimes a shell builtin) to send the signal to a process at will.
In the AIX operating system, for 32-bit executables, SIGSEGV
can be generated due to insufficient segment-size. The way the memory model of AIX is designed, segments, by default, have a fixed size (256Mb). In case a process requests more memory than this, a segment violation occurs and the operating system delivers a SIGSEGV
signal to the process. For resolving this, one can link with -bmaxdata=<num>
or set the runtime environment variable LDR_CNTRL=MAXDATA
.
|