linux 当前处理信号自动屏蔽

在Linux系统中,当一个信号正在被处理时,内核会自动阻止该信号的再次触发,防止信号处理函数的嵌套执行。在信号处理函数返回后,信号的屏蔽状态会恢复到调用处理函数之前的状态。例如,SIGUSR1如果未被阻塞,处理后将恢复未阻塞状态;而SIGUSR2如果被阻塞,在处理后仍保持阻塞。通过示例代码可以观察到信号处理前后的mask变化,了解信号处理栈帧和sigreturn系统调用的角色。在某些情况下,如使用longjmp,可能无法正常恢复信号屏蔽,导致信号持续被阻塞。
摘要由CSDN通过智能技术生成

当某个信号被处理时(即正在执行信号处理handler),内核会自动阻塞该信号的再次传递(再次传递会导致信号处理handler的嵌套);
当信号处理返回后,内核会自动恢复该信号到调用信号处理handler之前的阻塞状态;


如信号SIGUSR1在调用handler之前未被阻塞,在调用handler时被阻塞,handler执行完后恢复未被阻塞状态;
信号SIGUSR2在调用handler之前被阻塞,在调用handler时仍被阻塞,handler执行完后恢复被阻塞状态;

 

Ref:

Advanced Programming in the UNIX Environment: Second Edition>>10.14. sigaction Function

Hence, we are guaranteed that whenever we are processing a given signal, another occurrence of that same signal is blocked until we're finished processing the first occurrence. Recall from Section 10.8 that additional occurrences of the same signal are usually not queued. If the signal occurs five times while it is blocked, when we unblock the signal, the signal-handling function for that signal will usually be invoked only one time.


用以下示例代码观察信号处理前、处理中、处理后的mask变化情况:</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值