本節主要介紹使用sigprocmask函式來人工設定訊號阻塞。首先介紹函式原型:
/* get and/or change the set of blocked signals. */
extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
sigset_t *__restrict __oset) __throw;
1)函式引數說明:
__how: 輸入引數,設定訊號阻塞掩碼的方式。可以包括3中掩碼設定,分別是阻塞訊號的sig_block,接觸阻塞的sig_unblock, 設定阻塞掩碼的sig_setmask。
__set: 輸入引數,阻塞訊號集。當引數__how為sig_block時,該引數標明要阻塞的訊號集。當__how引數為sig_unblock時,該引數解除阻塞的訊號集。當__how引數為sig_setmask時,該引數標明要阻塞的訊號集。
__oset: 輸出引數,原阻塞訊號集。呼叫成功後,將返回該程序原阻塞訊號集。
2)返回值說明:
0: 呼叫成功;
-1: 呼叫失敗,可以通過errno獲取詳細資訊。
示例:
#include #include #include #include void
handle_sigint(int signo)
intmain(void)
執行結果:
[root@localhost linuxc]# ./mysigprocmask
<-按下+程序無返回,說明訊號被阻塞。
receive signal 2 10秒休眠結束後,程序收到訊號 (訊號被重新傳送)
Linux訊號處理機制(二) 阻塞訊號
訊號在核心中一般有三種狀態 1 訊號遞達 delivery 實際執行訊號的處理動作稱為訊號遞達 2 訊號未決 pending 訊號從產生到遞達之間的狀態 3 訊號阻塞 block 被阻塞的訊號產生時將保持在未決狀態,直到程序解除對此訊號的阻塞,才執行遞達的動作 注意 阻塞與忽略是不同的,只要訊號被阻...
訊號的阻塞
訊號的阻塞就是讓系統暫時保留訊號留待以後傳送。注意 不是不傳送,而是延遲傳送 一般情況下訊號的阻塞只是暫時的,只是為了防止訊號打斷敏感的操作。1 訊號集 所有的訊號阻塞函式都使用稱作訊號集的資料結構來表明受到影響的訊號。每乙個操作都包括兩個階段 建立訊號集,傳遞訊號集給特定的庫函式。下面說明訊號集和...
訊號的阻塞
一.阻塞訊號 1.訊號的相關概念 1 遞達 實際執行訊號的處理動作稱為訊號的遞達 2 未決 訊號從產生到遞達之間的過程叫做訊號的未決 3 阻塞 程序可以選擇阻塞某個訊號,被阻塞的訊號產生時將保持在未決狀態,直到程序解除該訊號的遮蔽,才執行遞達動作.4 阻塞和忽略的不同 訊號被阻塞就不會被遞達,而訊號...