03-再论信号的非队列化处理
21.1.1 再论信号的非队列化处理
20.10 节已然提及,在执行某信号的处理器函数时会阻塞同类信号的传递(除非在调用sigaction()时指定了SA_NODEFER标志)。如果在执行处理器函数时(再次)产生同类信号,那么会将该信号标记为等待状态并在处理器函数返回之后再行传递。前一章还曾指出,不会对信号进行排队处理。在处理器函数执行期间,如果多次产生同类信号,那么仍然会将其标记为等待状态,但稍后只会传递一次。
信号的这种“失踪”方式无疑将影响对信号处理器函数的设计。首先,无法对信号的产生次数进行可靠计数。其次,在为信号处理器函数编码时可能需要考虑处理同类信号多次产生的情况。26.3.1节在讨论SIGCHLD信号时会有相关示例。