linux操作系统信号捕捉函数之sigaction用法小结
(1)sigaction函數(shù):注冊(cè)一個(gè)信號(hào)捕捉函數(shù)(不參與捕捉信號(hào),信號(hào)由內(nèi)核捕捉),并修改原來(lái)的信號(hào)處理動(dòng)作
(2)函數(shù)原型及頭文件
? ? ? ? ? ? ?頭文件:#include<signal.h>
? ? ? ? ? ? 函數(shù)原型:int sigaction(int signum,const struct sigaction*act,struct sigaction*oldact);
(3)返回值:成功返回值為0.失敗返回值為-1
(4)結(jié)構(gòu)體參數(shù):struct sigaction
? ? ? ? ? ?struct sigaction{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?void? (*sa_handler)(int);//信號(hào)捕捉函數(shù)的函數(shù)指針
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?void? (*sa_sigaction)(int ,siginfo_t*,void*);//當(dāng)sa_flag==SA_SIGINFO,使用此函數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sigset_t sa_mask;//信號(hào)捕捉函數(shù)執(zhí)行時(shí)指定的臨時(shí)信號(hào)集
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int sa_flags;//通常設(shè)置為0,表示默認(rèn)屬性,即信號(hào)捕捉函數(shù)期間自動(dòng)屏蔽本信號(hào)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?void? ? (*sa_restorer)(void);//舍棄不用
? ? ? ? ? ? ? ? ? ? ? ? };
(5)sigaction函數(shù)實(shí)現(xiàn):
(6)sigaction使用注意點(diǎn)
? ? ? ? ?1)在信號(hào)捕捉函數(shù)執(zhí)行期間,如果遇到sa_mask屏蔽信號(hào)字中的信號(hào),則會(huì)發(fā)生阻塞,等到捕捉函數(shù)執(zhí)行完畢后再處理這個(gè)信號(hào)。
? ? ? ? ?2)在信號(hào)捕捉函數(shù)執(zhí)行期間,阻塞的常規(guī)信號(hào)不支持排隊(duì),產(chǎn)生多次只記錄一次。如果再次發(fā)捕獲信號(hào),則會(huì)再次進(jìn)入信號(hào)捕捉函數(shù)。
? ? ? ? 3)如果在信號(hào)捕捉函數(shù)執(zhí)行期間,遇到sa_mask之外的信號(hào),則會(huì)優(yōu)先執(zhí)行這個(gè)信號(hào),然后再執(zhí)行信號(hào)捕捉函數(shù)(如果前面的信號(hào)沒(méi)有讓程序結(jié)束或暫停)。
總結(jié)
以上是生活随笔為你收集整理的linux操作系统信号捕捉函数之sigaction用法小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个角色可以使用几个技能类型扩展券?
- 下一篇: linux操作系统信号捕捉函数之回调函数