当某个信号被处理时(即正在执行信号处理handler),内核会自动阻塞该信号的再次传递(再次传递会导致信号处理handler的嵌套);
当信号处理返回后,内核会自动恢复该信号到调用信号处理handler之前的阻塞状态;
如信号SIGUSR1在调用handler之前未被阻塞,在调用handler时被阻塞,handler执行完后恢复未被阻塞状态;
信号SIGUSR2在调用handler之前被阻塞,在调用handler时仍被阻塞,handler执行完后恢复被阻塞状态;
Ref:
Advanced Programming in the UNIX Environment: Second Edition>>10.14. sigaction Function
Hence, we are guaranteed that whenever we are processing a given signal, another occurrence of that same signal is blocked until we're finished processing the first occurrence. Recall from Section 10.8 that additional occurrences of the same signal are usually not queued. If the signal occurs five times while it is blocked, when we unblock the signal, the signal-handling function for that signal will usually be invoked only one time.
用以下示例代码观察信号处理前、处理中、处理后的mask变化情况:</