Signals are a simple UNIX mechanism for controlling processes. A signal is a 5-bit message to a process that requires immediate attention. Each signal has associated with it a default action; for some signals, you can change this default action. Signals are generated by exceptions, which include:
Attempts to use illegal instructions
Certain kinds of mathematical operations
Window resize events
Predefined alarms
The user pressing an interrupt key on a terminal
Another program using the kill() l or killpg() system calls
A program running in the background attempting to read from or write to its controlling terminal
A child process calling exit or terminating abnormally
The system default may be to ignore the signal, to terminate the process receiving the signal (and, optionally, generate a core file), or to suspend the process until it receives a continuation signal. Some signals can be caught - that is, a program can specify a particular function that should be run when the signal is received. By design, UNIX supports exactly 31 signals. They are listed in the files /usr/include/signal.h and /usr/include/sys/signal.h. Table 27.4 contains a summary.
Signal Name  | Number[7]  | Key  | Meaning[8]  | 
|---|---|---|---|
SIGHUP  | 1  | Hangup (sent to a process when a modem or network connection is lost)  | |
SIGINT  | 2  | Interrupt (generated by CTRL-C (Berkeley UNIX) or RUBOUT (System V).  | |
SIGQUIT  | 3  | *  | Quit  | 
SIGILL  | 4  | *  | Illegal instruction  | 
SIGTRAP  | 5  | *  | Trace trap  | 
SIGIOT  | 6  | *  | I/O trap instruction; used on PDP-11 UNIX  | 
SIGEMT  | 7  | *  | Emulator trap instruction; used on some computers without floating-point hardware support  | 
SIGFPE  | 8  | *  | Floating-point exception  | 
SIGKILL  | 9  | !  | Kill  | 
SIGBUS  | 10  | *  | Bus error (invalid memory reference, such as an attempt to read a full word on a half-word boundary)  | 
SIGSEGV  | 11  | *  | Segmentation violation (invalid memory reference, such as an attempt to read outside a process's memory map)  | 
SIGSYS  | 12  | *  | Bad argument to a system call  | 
SIGPIPE  | 13  | Write on a pipe that has no process to read it  | |
SIGALRM  | 14  | Timer alarm  | |
SIGTERM  | 15  | Software termination signal (default kill signal)  | |
SIGURG  | 16  | @  | Urgent condition present  | 
SIGSTOP  | 17  | +!  | Stop process  | 
SIGTSTP  | 18  | +  | Stop signal generated by keyboard  | 
SIGCONT  | 19  | @  | Continue after stop  | 
SIGCHLD  | 20  | @  | Child process state has changed  | 
SIGTTIN  | 21  | +  | Read attempted from control terminal while process is in background  | 
SIGTTOU  | 22  | +  | Write attempted to control terminal while process is in background  | 
SIGIO  | 23  | @  | Input/output event  | 
SIGXCPU  | 24  | CPU time limit exceeded  | |
SIGXFSZ  | 25  | File size limit exceeded  | |
SIGVTALRM  | 26  | Virtual time alarm  | |
SIGPROF  | 27  | Profiling timer alarm  | |
SIGWINCH  | 28  | @  | tty window has changed size  | 
SIGLOST  | 29  | Resource lost  | |
SIGUSR1  | 30  | User-defined signal #1  | |
SIGUSR2  | 31  | User-defined signal #2  | 
[7] The signal number varies on some systems.
[8] The default action for most signals is to terminate.
Key:
*  | If signal is not caught or ignored, generates a core image dump.  | 
@  | Signal is ignored by default.  | 
+  | Signal causes process to suspend.  | 
!  | Signal cannot be caught or ignored.  | 
Signals are normally used between processes for process control. They are also used within a process to indicate exceptional conditions that should be handled immediately (for example, floating-point overflows).