SIGBUS
Encyclopedia
On POSIX
-compliant platforms, SIGBUS is the signal
sent to a process
when it causes a bus error. The symbolic constant
for SIGBUS is defined in the header file
in the context of a bus error.
Invalid address alignment: The program has attempted to read or write data that does not fit the CPU's memory-alignment rules.
Non-existent physical address: This is equivalent to a segmentation fault
, but for a physical address rather than a virtual address.
Object-specific hardware error: This is far less common, but it is present in Linux
and Solaris, when virtual memory pages have disappeared (e.g. accessing an mmap
ed file which has been truncated.)
For further discussion, see bus error.
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 SIGBUS is abnormal termination. This will end the process
, but may generate a core file to aid debugging, or other platform dependent action.
SIGBUS can be handled (caught). That is, applications can request what action they want to occur. Examples of such action might be ignoring it, calling a function
, or restoring the default action. In some circumstances, ignoring SIGBUS results in undefined behaviour
.
An example of an application that might handle SIGBUS is a debugger
, which might check the signal stack and inform the developer
of what happened, and where the program terminated.
SIGBUS is usually generated by the operating system
, but users with appropriate permissions can use the
or kill
command (a userland
program, or sometimes a shell builtin) to send the signal to a process at will.
POSIX
POSIX , an acronym for "Portable Operating System Interface", is a family of standards specified by the IEEE for maintaining compatibility between operating systems...
-compliant platforms, SIGBUS is the signal
Signal (computing)
A signal is a limited form of inter-process communication used in Unix, Unix-like, and other POSIX-compliant operating systems. Essentially it is an asynchronous notification sent to a process in order to notify it of an event that occurred. When a signal is sent to a process, the operating system...
sent to a process
Process (computing)
In computing, a process is an instance of a computer program that is being executed. It contains the program code and its current activity. Depending on the operating system , a process may be made up of multiple threads of execution that execute instructions concurrently.A computer program is a...
when it causes a bus error. The symbolic constant
C preprocessor
The C preprocessor is the preprocessor for the C and C++ computer programming languages. The preprocessor handles directives for source file inclusion , macro definitions , and conditional inclusion ....
for SIGBUS is defined in the header file
Header file
Some programming languages use header files. These files allow programmers to separate certain elements of a program's source code into reusable files. Header files commonly contain forward declarations of classes, subroutines, variables, and other identifiers...
signal.hSignal.hsignal.h is a header file defined in the C Standard Library to specify how a program handles signals while it executes. A signal can report some exceptional behavior within the program , or a signal can report some asynchronous event outside the program .A signal can be generated...
. Symbolic signal names are used because signal numbers can vary across platforms.Etymology
SIG is a common prefix for signal names. BUS refers to the address busAddress bus
An address bus is a computer bus that is used to specify a physical address. When a processor or DMA-enabled device needs to read or write to a memory location, it specifies that memory location on the address bus...
in the context of a bus error.
Usage
Computer programs may throw SIGBUS for improper memory handling:Invalid address alignment: The program has attempted to read or write data that does not fit the CPU's memory-alignment rules.
Non-existent physical address: This is equivalent to a segmentation fault
Segmentation fault
A segmentation fault , bus error or access violation is generally an attempt to access memory that the CPU cannot physically address. It occurs when the hardware notifies an operating system about a memory access violation. The OS kernel then sends a signal to the process which caused the exception...
, but for a physical address rather than a virtual address.
Object-specific hardware error: This is far less common, but it is present in Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...
and Solaris, when virtual memory pages have disappeared (e.g. accessing an mmap
Mmap
In computing, mmap is a POSIX-compliant Unix system call that maps files or devices into memory. It is a method of memory-mapped file I/O. It naturally implements demand paging, because initially file contents are not entirely read from disk and do not use physical RAM at all...
ed file which has been truncated.)
For further discussion, see bus error.
The operating system
Operating system
An operating system is a set of programs that manage computer hardware resources and provide common services for application software. The operating system is the most important type of system software in a computer 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 SIGBUS is abnormal termination. This will end the process
Process (computing)
In computing, a process is an instance of a computer program that is being executed. It contains the program code and its current activity. Depending on the operating system , a process may be made up of multiple threads of execution that execute instructions concurrently.A computer program is a...
, but may generate a core file to aid debugging, or other platform dependent action.
SIGBUS can be handled (caught). That is, applications can request what action they want to occur. Examples of such action might be ignoring it, calling a function
Subroutine
In computer science, a subroutine is a portion of code within a larger program that performs a specific task and is relatively independent of the remaining code....
, or restoring the default action. In some circumstances, ignoring SIGBUS results in undefined behaviour
Undefined behaviour
In computer programming, undefined behavior is a feature of some programming languages—most famously C. In these languages, to simplify the specification and allow some flexibility in implementation, the specification leaves the results of certain operations specifically undefined.For...
.
An example of an application that might handle SIGBUS is a debugger
Debugger
A debugger or debugging tool is a computer program that is used to test and debug other programs . The code to be examined might alternatively be running on an instruction set simulator , a technique that allows great power in its ability to halt when specific conditions are encountered but which...
, which might check the signal stack and inform the developer
Software developer
A software developer is a person concerned with facets of the software development process. Their work includes researching, designing, developing, and testing software. A software developer may take part in design, computer programming, or software project management...
of what happened, and where the program terminated.
SIGBUS is usually generated by the operating system
Operating system
An operating system is a set of programs that manage computer hardware resources and provide common services for application software. The operating system is the most important type of system software in a computer system...
, but users with appropriate permissions can use the
kill
system callSystem call
In computing, a system call is how a program requests a service from an operating system's kernel. This may include hardware related services , creating and executing new processes, and communicating with integral kernel services...
or kill
Kill (Unix)
In computing, kill is a command that is used in several popular operating systems to send signals to running processes, for example to request the termination of this process.-Unix and Unix-like:...
command (a userland
Userland
Userland may refer to:* Userland , operating system software that does not belong in the kernel* UserLand Software, a U.S. software company specializing in web applications* Radio UserLand, a computer program to aid maintaining blogs or podcasts...
program, or sometimes a shell builtin) to send the signal to a process at will.