A signal is an asynchronous event that can happen in a program. The
operating system defines the possible kinds of signals, and gives each
kind a name and a number. For example, in Unix
SIGINT is the
signal a program gets when you type an interrupt character (often C-c);
SIGSEGV is the signal a program gets from referencing a place in
memory far away from all the areas in use;
SIGALRM occurs when
the alarm clock timer goes off (which happens only if your program has
requested an alarm).
Some signals, including
SIGALRM, are a normal part of the
functioning of your program. Others, such as
errors; these signals are fatal (they kill your program immediately) if the
program has not specified in advance some other way to handle the signal.
SIGINT does not indicate an error in your program, but it is normally
fatal so it can carry out the purpose of the interrupt: to kill the program.
GDB has the ability to detect any occurrence of a signal in your program. You can tell GDB in advance what to do for each kind of signal.
Normally, GDB is set up to let the non-erroneous signals like
SIGALRM be silently passed to your program
(so as not to interfere with their role in the program's functioning)
but to stop your program immediately whenever an error signal happens.
You can change these settings with the
info handleis an alias for
handle signal keywords...
The keywords allowed by the
handle command can be abbreviated.
Their full names are:
nostopkeyword as well.
When a signal stops your program, the signal is not visible to the
program until you
continue. Your program sees the signal then, if
pass is in
effect for the signal in question at that time. In other words,
after GDB reports a signal, you can use the
nopass to control whether your
program sees that signal when you continue.
The default is set to
non-erroneous signals such as
SIGCHLD, and to
pass for the
You can also use the
signal command to prevent your program from
seeing a signal, or cause it to see a signal it normally would not see,
or to give it any signal at any time. For example, if your program stopped
due to some sort of memory reference error, you might store correct
values into the erroneous variables and continue, hoping to see more
execution; but your program would probably terminate immediately as
a result of the fatal signal once it saw the signal. To prevent this,
you can continue with `signal 0'. See section Giving your program a signal.
Go to the first, previous, next, last section, table of contents.