Signal data structures

Information about signals in POSIX systems is stored in two data structures: the signal set (a sigset_t), which represents some subset of all possible signals, and the signal action (represented by a struct sigaction), which is a handler function and an additional mask.

struct sigaction {
   void (*sa_handler)(int);
   sigset_t sa_mask;
   int sa_flags;
};

The sa_handler member corresponds to the second argument of the signal() function. The sa_mask adds to the existing signal mask for the process.

The sa_mask set of signals are signals to be blocked during the execution of sa_handler(). The set of signals that are blocked during the execution of the handler function are the union of the process signal mask and sa_mask.

The Interix Software Development Kit (SDK) provides the SA_RESTART flag, which is found in Berkeley Software Distribution (BSD).