在阅读了文档之后,我仍然不太理解信号阻塞。如果你有一个屏蔽,阻止一个给定的信号,你需要先解除该信号,以允许程序拦截它,还是信号阻塞行为以不同的方式?
如果你使用σ挂起,你的程序是否会被挂起,直到当一个参数到达时从你传递的掩码发出一个给定的信号?
当您在使用σ挂起时等待的信号应该解除阻塞还是没有必要?
顺便说一下,我正在使用C和p线程库来编写我的程序。
发布于 2022-03-20 15:33:14
如果您有一个掩码来阻止给定的信号,那么您需要先解除该信号的阻塞以允许程序拦截它,还是信号阻塞的行为方式不同?
信号从未传递到任何阻塞它的线程。如果一个进程的所有线程都被阻塞,就会引发一个信号,那么它将一直挂起,直到至少一个线程被解除阻塞,或者进程终止为止。
如果您使用σ暂停,您的程序是否会被挂起,直到当参数到达时从掩码传递的给定信号为止?
不是的。传递给sigsuspend的信号掩码与传递给(例如)sigprocmask()的信号掩码具有相同的含义:它指定了一组应该阻塞的信号。此掩码不能包含任何您希望线程能够接收的信号。通常情况下,适当地传递sigsuspend()之前的sigprocmask()调用之前有效的掩码,如果您请求,后者将提供给您。
应该解除您在使用σ挂起时等待的信号,还是没有必要这样做?
在任何时候,您都应该确保您希望线程能够接收的任何信号都被解除阻塞,反之,线程不能接收的任何信号都会被阻塞。这就是为什么sigsuspend()为您提供了一种方法来指定在调用期间有效的不同的信号掩码。
https://stackoverflow.com/questions/71548009
复制相似问题