首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解信号阻塞和信号暂停

理解信号阻塞和信号暂停
EN

Stack Overflow用户
提问于 2022-03-20 15:17:38
回答 1查看 89关注 0票数 0

在阅读了文档之后,我仍然不太理解信号阻塞。如果你有一个屏蔽,阻止一个给定的信号,你需要先解除该信号,以允许程序拦截它,还是信号阻塞行为以不同的方式?

如果你使用σ挂起,你的程序是否会被挂起,直到当一个参数到达时从你传递的掩码发出一个给定的信号?

当您在使用σ挂起时等待的信号应该解除阻塞还是没有必要?

顺便说一下,我正在使用C和p线程库来编写我的程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-20 15:33:14

如果您有一个掩码来阻止给定的信号,那么您需要先解除该信号的阻塞以允许程序拦截它,还是信号阻塞的行为方式不同?

信号从未传递到任何阻塞它的线程。如果一个进程的所有线程都被阻塞,就会引发一个信号,那么它将一直挂起,直到至少一个线程被解除阻塞,或者进程终止为止。

如果您使用σ暂停,您的程序是否会被挂起,直到当参数到达时从掩码传递的给定信号为止?

不是的。传递给sigsuspend的信号掩码与传递给(例如)sigprocmask()的信号掩码具有相同的含义:它指定了一组应该阻塞的信号。此掩码不能包含任何您希望线程能够接收的信号。通常情况下,适当地传递sigsuspend()之前的sigprocmask()调用之前有效的掩码,如果您请求,后者将提供给您。

应该解除您在使用σ挂起时等待的信号,还是没有必要这样做?

在任何时候,您都应该确保您希望线程能够接收的任何信号都被解除阻塞,反之,线程不能接收的任何信号都会被阻塞。这就是为什么sigsuspend()为您提供了一种方法来指定在调用期间有效的不同的信号掩码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71548009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档