sigemptyset(&new_mask);
sigaddset(&new_mask,sigquit); //將訊號sigquit,新增到空訊號集new_mask中
if(sigprocmask(sig_block, &new_mask,&old_mask)) //把訊號sigquit給阻塞
sigemptyset(&zero_mask); //清空訊號集zero_mask
while(quitflag == 0)
if(sigprocmask(sig_setmask,&old_mask,null)<0) //程式繼續執行後恢復程序原來的訊號掩碼
是為了原子操作
如果之前沒有呼叫sigprocmask()遮蔽sigquit訊號,那麼sigquit訊號隨時都能發生
假定恰恰在判斷quitflag == 0之後,訊號發生,呼叫訊號處理程式,quitflag = 1
從訊號處理程式返回後,開始呼叫sigsuspend()..
如果此後沒有第二個sigquit訊號,那麼程式將一直阻塞在sigsuspend(),雖然此時quitflag = 1
呼叫sigprocmask()遮蔽sigquit訊號之後,即使訊號發生,也將延遲遞交,直到sigsuspend()解除訊號遮蔽。
訊號sigprocmask函式
include int sigprocmask int how,const sigset t restrict set,sigset t restrict oset 返回值 若成功則返回0,若出錯則返回 1首先,若oset是非空指標,那麼程序的當前訊號遮蔽字通過oset返回。其次,若set是乙個非空...
sigprocmask阻塞訊號
有時候不希望在接到訊號時就立即停止當前執行,去處理訊號,同時也不希望忽略該訊號,而是延時一段時間去呼叫訊號處理函式 1.訊號阻塞和忽略訊號的區別 作業系統在訊號被程序解除阻塞之前不會將訊號傳遞出去,被阻塞的訊號也不會影響程序的行為,訊號只是暫時被阻止傳遞。當程序忽略乙個訊號時,訊號會被傳遞出去但程序...
訊號之sigprocmask函式
乙個程序的訊號遮蔽字規定了當前阻塞而不能遞送給該程序的訊號集。呼叫函式sigprocmask可以檢測或更改其訊號遮蔽字,或者在乙個步驟中同時執行這兩個操作。include int sigprocmask int how,const sigset t restrict set,sigset t res...