訊號之sigprocmask函式

2022-05-04 20:09:18 字數 1207 閱讀 9292

乙個程序的訊號遮蔽字規定了當前阻塞而不能遞送給該程序的訊號集呼叫函式sigprocmask可以檢測或更改其訊號遮蔽字,或者在乙個步驟中同時執行這兩個操作。

#include int sigprocmask( int how, const sigset_t *restrict set, sigset_t *restrict oset );

返回值:若成功則返回0,若出錯則返回-1

首先,若oset是非空指標,那麼程序的當前訊號遮蔽字通過oset返回。

其次,若set是乙個非空指標,則引數how指示如何修改當前訊號遮蔽字。

表10-4說明了how可選用的值。注意,不能阻塞sigkill和sigstop訊號

表10-4 用sigprocmask更改當前訊號遮蔽字的方法

how

說明

sig_block

該程序新的訊號遮蔽字是其當前訊號遮蔽字和set指向訊號集的並集。set包含了我們希望阻塞的附加訊號

sig_unblock

該程序新的訊號遮蔽字是其當前訊號遮蔽字和set所指向訊號集補集的交集。set包含了我希望解除阻塞的訊號

sig_setmask

該程序新的訊號遮蔽字將被set指向的訊號集的值代替

如果set是空指標,則不改變該程序的訊號遮蔽字,how的值也無意義

在呼叫sigprocmask後如果有任何未決的、不再阻塞的訊號,則在sigprocmask返回前,至少會將其中乙個訊號遞送給該程序。

sigprocmask是僅為單執行緒的程序定義的。

程式清單10-10 為程序列印訊號遮蔽字中訊號的名稱

#include "

apue.h

"#include

void

pr_mask(

const

char *str)

本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:

關於訊號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.訊號阻塞和忽略訊號的區別 作業系統在訊號被程序解除阻塞之前不會將訊號傳遞出去,被阻塞的訊號也不會影響程序的行為,訊號只是暫時被阻止傳遞。當程序忽略乙個訊號時,訊號會被傳遞出去但程序...