signal 的block,pending,unblock状态
BLOCK :
sigemptyset(&newmask);
sigaddset(&newmask, SIGQUIT);
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) err_sys("SIG_BLOCK error");
现在 SIGQUIT 信号已经被 BLOCK了
Pending :
在设置 SIGQUIT 之后所有 产生的 SIGQUIT 信号都处于 PENDING 状态,
UNBLOCK :
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) err_sys("SIG_SETMASK error");
恢复之前的设置, 信号处理过程可以处理之前被 block, 处于 pending 状态的信号.如果在block 期间产生了多个 SIGQUIT 信号,信号处理程序也只会处理一次