next up previous
Next: 3.6 Processor State Up: 3 Components of a Previous: 3.4.1 Augmenting System Calls

3.5 Signals

An interesting part of a process's state is its collection of signal handling attributes. In UNIX processes, signals may be blocked, ignored, take default action, or invoke a programmer defined signal handler. At checkpoint time a table is built, again in the process's data segment, which records the handling status for each possible signal. The set of blocked signals is obtained from the sigprocmask() system call, and the handling of individual signals is obtained from the sigaction() system call. An interesting situation results if a a signal has been sent to a process, but that process has the signal blocked. Such a signal is said to be ``pending''. If a signal is pending at checkpoint time, the same situation must be re-created at restart time. We determine the set of pending signals with the sigispending() system call. At restart time the process will first block each pending signal, then send itself an instance of each such signal. This ensures that if the user code later unblocks the signal, it will be delivered.