sigprocmask阻塞訊號

2022-03-19 15:07:38 字數 844 閱讀 8012

有時候不希望在接到訊號時就立即停止當前執行,去處理訊號,同時也不希望忽略該訊號,而是延時一段時間去呼叫訊號處理函式

1. 訊號阻塞和忽略訊號的區別

作業系統在訊號被程序解除阻塞之前不會將訊號傳遞出去,被阻塞的訊號也不會影響程序的行為,訊號只是暫時被阻止傳遞。當程序忽略乙個訊號時,訊號會被傳遞出去但程序會將訊號丟棄

2. sigprocmask

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
改變程序的當前阻塞訊號集,也可以用來檢測當前程序的訊號掩碼

how:

oldset:不是null指標,那麼目前的訊號遮蔽字會由此指標返回

注:sigprocmask()函式只為單執行緒的程序定義的,在多執行緒中要使用pthread_sigmask變數,在使用之前需要宣告和初始化

3. 設定方法

sig_block,sig_unblock成對實現。可以不用關心oldset

4. 示例

sigemptyset(&set); //初始化訊號量集  

sigaddset(&set,sigtstp); //將sigtstp新增到訊號量集中

sigaddset(&set,sigint);//將sigint新增到訊號量集中

sigprocmask(sig_setmask,&set,&oldset); //將set中的sigint,sigtstp阻塞掉,並儲存當前訊號遮蔽字

關於訊號sigprocmask

sigemptyset new mask sigaddset new mask,sigquit 將訊號sigquit,新增到空訊號集new mask中 if sigprocmask sig block,new mask,old mask 把訊號sigquit給阻塞 sigemptyset zero ...

訊號sigprocmask函式

include int sigprocmask int how,const sigset t restrict set,sigset t restrict oset 返回值 若成功則返回0,若出錯則返回 1首先,若oset是非空指標,那麼程序的當前訊號遮蔽字通過oset返回。其次,若set是乙個非空...

sigprocmask 阻塞程序

1 有時候不希望在接到訊號時就立即停止當前執行,去處理訊號,同時也不希望忽略該訊號,而是延時一段時間去呼叫訊號處理函式。這種情況是通過阻塞訊號實現的。2 訊號阻塞和忽略訊號的區別。阻塞的概念和忽略訊號是不同的。作業系統在訊號被程序解除阻塞之前不會講訊號傳遞出去,被阻塞的訊號也不會影響程序的行為,訊號...