+ -
当前位置:首页 → 问答吧 → 关于sigprocmask的一个问题

关于sigprocmask的一个问题

时间:2010-09-12

来源:互联网

APUE中有一段话我很疑惑,大致是这样的:
当我阻塞SIGINT后又用sigprocmask解除对此信号的阻塞,就在解除阻塞后紧跟pause语句执行暂停;可是在pause之前,sigprocmask之后这个时间窗口中出现SIGINT的传递会发生什么情况呢?

APUE中说的是该信号会丢失,我觉得不能理解,因为sigprocmask(SIG_SETMASK, &oldmask, NULL)不是把阻塞解除了么?那么如果在后面紧接的pause()执行之前,把之前就已经block了的SIGINT信号传递过来了,那势必按照默认的方式,终止该进程啊?为什么说会丢失这个信号呢?

帮忙指导一下,谢谢~

作者: blackgenius   发布时间: 2010-09-12

你理解的没错,不过要深入理解需要结合sigsuspend.
APUE在这里所说的信号丢失,不是真正的丢失,而是没有被接下来的pause等到。
如果你在程序一开始就注册了信号处理函数,那么在sigprocmask和pause之间的
这个信号还是会触发信号处理函数,如果信号是SIGINT,缺省就会中止进程。

作者: insnowind   发布时间: 2010-09-12

相关阅读 更多