sigprocmask() 中的 Set 和 Oldset
我还没有完全理解如何使用sigprocmask()
。 特别是 set
和 oldset
及其语法如何工作以及如何使用它们。
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
请举例说明,要阻止,请说 SIGUSR1 几秒钟,然后解除阻止并处理它。
I haven't completely understood, how to use sigprocmask()
. Particularly, how the set
and oldset
and its syntax work and how to use them.
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
Please explain with an example, to block, say SIGUSR1 for a few seconds and then unblock and handle it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个想法是在
set
中提供一个掩码,实际上是一个信号列表。how
参数说明您应该如何处理set
中的掩码。您可以使用
SIG_BLOCK
来阻止set
列表中的信号,也可以使用SIG_UNBLOCK
来取消阻止它们。 这些都不会更改列表中未设置的信号。SIG_SETMASK
阻止列表中的信号,并取消阻止列表中未设置的信号。例如,假设旧的阻止列表为
{SIGSEGV, SIGSUSP}
并且您使用以下参数调用sigprocmask
:新的阻止列表现在将为
{SIGSEGV, SIGSUSP、SIGUSR1}
。如果您现在使用这些参数调用
sigprocmask
:新的阻止列表将恢复为
{SIGSEGV, SIGSUSP}
。如果您现在使用这些参数调用
sigprocmask
:新的阻止列表现在将设置为
{SIGUSR1}
。oldset
参数告诉您之前的阻止列表是什么。 如果我们有这样的声明:并且我们像这样调用前面示例中的代码:
现在我们有:
如果我们现在这样做:
我们会得到
如果我们这样做:
我们会得到这个:
因为这是之前的值阻塞集。
The idea is that you provide a mask in
set
, effectively a list of signals. Thehow
argument says what you should do with the mask inset
.You can either use
SIG_BLOCK
to block the signals in theset
list, orSIG_UNBLOCK
to unblock them. Neither of these changes the signals that aren't set in the list.SIG_SETMASK
blocks the signals in the list, and unblocks the ones that aren't set in the list.For instance, assume that the old blocking list was
{SIGSEGV, SIGSUSP}
and you callsigprocmask
with these arguments:The new blocking list will now be
{SIGSEGV, SIGSUSP, SIGUSR1}
.If you call
sigprocmask
with these arguments now:The new blocking list will go back to being
{SIGSEGV, SIGSUSP}
.If you call
sigprocmask
with these arguments now:The new blocking list will now be set to
{SIGUSR1}
.The
oldset
argument tells you what the previous blocking list was. If we have this declaration:and we call the code in the previous examples like this:
now we have:
If we now do:
we'll get
and if we do:
we'll get this:
because this is the previous value of the blocking set.