我正在寻找一种方法,从信号处理程序中,有条件地中断系统调用,这种方式在处理信号时发生。具体来说,假设一个调用read
正在处理中,并且SIGRT0
被接收到。使用此信号处理程序SA_RESTART
是因为它不想无条件地中断系统调用,但根据条件,我希望在信号处理程序read
返回后EINTR
立即返回。
我可以做到这一点的一种方法是为 设置另一个信号处理程序SIGRT1
,为 的处理程序放入SIGRT1
信号掩码,然后从处理程序SIGRT0
中省略。然后处理程序can ,当第一个非中断信号处理程序返回时,第二个将触发并被中断。SA_RESTART
SIGRT1
SIGRT0
raise
SIGRT1
read
此解决方案的问题是其他进程可能会发送SIGRT1
,从而导致意外EINTR
发生。
有什么办法可以达到我想要的结果吗?