一、介绍
sigsuspend()暂时将调用过程的信号掩码替换为mask给定的掩码,然后挂起进程,直到传递信号的动作是调用信号处理程序或终止信号处理。
sigsuspend 应用的场景:
1.临时阻塞一个信号,以防止其信号处理器不会将某些关键代码片段的执行中断
2.解除对信号的阻塞,然后暂停执行,直到有信号到达。sigsuspend和sigprocmask一样无法阻止SIGKILL或SIGSTOP, 之前我们说过如果执行某个任务的时候不想被某个信号打断,可以用sigprocmask或者sigaction的sa_mask来屏蔽信号,等任务结束之后然后再解除阻塞的信号.
注意:
这样虽说没问题,但是我们假设一个任务完成之后sigprocmask解除信号,紧跟着pause()去等待某个信号到来,这里就会存在一个潜在的时间差bug.sigset_t prevMask; if(sigprocmask(SIG_SETMASK, &prevMask, NULL) == -1) { perror("sigprocmask:"); exit(EXIT_FAILURE); } pa