Open System Services Programmer's Guide

Types of Signals
Signals are categorized as synchronous, asynchronous, or process level:
Synchronous signals result from an event that occurs inside a process and are delivered
synchronously with that event. These signals are delivered to current active thread. If current
active thread has not installed the signal handler, then default actions are performed. Signals
in this category are:
SIGABRT
SIGFPE
SIGILL
SIGIO
SIGLIMIT
SIGMEMERR
SIGMEMMGR
SIGNOMEM
SIGSEGV
SIGSTK
SIGWINCH
Asynchronous signals result from an event that is external to the process and are delivered at
any point in the execution of a thread. These signals are delivered to the active threads in
FIFO order. If no active threads have installed a signal handler for the signal, the process-level
actions described in Table 68 (page 385) are performed. Signals in this category are:
SIGINT
SIGPIPE
SIGQUIT
SIGTERM
SIGURG
SIGUSR1
SIGUSR2
For process level signals only process level actions can be performed. Signal handlers for
these signals are registered directly to the operating system, so an existing handler for a given
signal is overwritten when a new signal handler is defined for that signal. Signals in this
category are:
SIGABEND (cannot be handled by a user-defined signal handler)
SIGCONT
SIGKILL (cannot be handled by a user-defined signal handler)
SIGSTOP (cannot be handled by a user-defined signal handler)
SIGTSTP (process level action is performed)
SIGTIMEOUT
SIGTTIN
SIGTTOU
SIGUNCP
Limitations
Do not deliver signals like SIGALRM and SIGCHLD using the kill command or the raise()
function because these functions do not provide enough information about the process IDs for the
parent and child processes. Instead, use the PUT Model library version of the alarm() function
to raise alarms.
Examples
Example 86 (page 390) provides an example of handling the synchronous signal SIGFPE. Because
thread-aware signal handling is always enabled, the signal handler defined in the example is
Signals and Signal Handling 389