linux信号捕捉
信號(hào)捕捉,防止進(jìn)程意外死亡
man signal
參數(shù)介紹;
signum 要捕捉的信號(hào)
handler 要執(zhí)行的捕捉函數(shù)指針,函數(shù)聲明 void func(int)
man sigaction
參數(shù)介紹:
signum 要捕捉的信號(hào)
act 傳入的動(dòng)作
struct sigaction {void (*sa_handler)(int);//函數(shù)指針void (*sa_sigaction)(int, siginfo_t *, void *);sigset_t sa_mask;//執(zhí)行捕捉函數(shù)期間,臨時(shí)屏蔽的信號(hào)集int sa_flags; //一般用0(對(duì)應(yīng)使用第一個(gè)函數(shù)指針),SA_SIGINFO會(huì)使用第二個(gè)函數(shù)指針void (*sa_restorer)(void); //無(wú)效參數(shù) };oldact 傳出參數(shù),原有的動(dòng)作
代碼示例:
使用 sigaction 捕捉setitimer發(fā)出的 14號(hào)信號(hào):
信號(hào)捕捉的特性
‘’’
1.進(jìn)程正常運(yùn)行時(shí),默認(rèn)PCB中有一個(gè)信號(hào)屏蔽字,假定為☆,它決定了進(jìn)程自動(dòng)屏蔽哪些信號(hào)。當(dāng)注冊(cè)了某個(gè)信號(hào)捕捉函數(shù),捕捉到該信號(hào)以后,要調(diào)用該函數(shù)。而該函數(shù)有可能執(zhí)行很長(zhǎng)時(shí)間,在這期間所屏蔽的信號(hào)不由☆來(lái)指定。而是用sa_mask來(lái)指定。調(diào)用完信號(hào)處理函數(shù),再恢復(fù)為☆。
2.XXX信號(hào)捕捉函數(shù)執(zhí)行期間,XXX信號(hào)自動(dòng)被屏蔽。
3.阻塞的常規(guī)信號(hào)不支持排隊(duì),產(chǎn)生多次只記錄一次。(后32個(gè)實(shí)時(shí)信號(hào)支持排隊(duì))
‘’’
內(nèi)核實(shí)現(xiàn)信號(hào)捕捉過(guò)程
總結(jié)
- 上一篇: 成都大熊猫繁育基地学生证严不
- 下一篇: linux 线程学习初步01