訊號遮蔽與訊號遞達

2021-08-02 15:22:44 字數 876 閱讀 9344

訊號遞達(handler):實際執行訊號的處理動作,

訊號未決(pending):訊號從產生到遞達之間的狀態,

訊號阻塞(block):被阻塞的訊號產生時將保持在未決狀態,直到程序解除對此訊號的阻塞,才執行遞達的動作。

【注意】:阻塞和忽略是不同的,只要訊號被阻塞,就不會遞達,而忽略是在遞達之後會選擇的一種動作。

對於訊號1:沒有阻塞,也沒有產生過,如果遞達則執行預設動作;

對於訊號2:產生過,現在正在阻塞,如果遞達則忽略該訊號,但是在遞達前可能會更改遞達後操作;

對於訊號3:沒有產生過,如果產生則會阻塞該訊號,遞達後的動作是執行使用者自定義的程式。

下面嘗試接受2號訊號,檢視程序的pending表:

上面程式只能接受一次2號訊號。

如果要多次接受2號訊號,只需要加乙個迴圈就行了。

linux訊號集與訊號遮蔽字

訊號傳遞過程 一些名詞 需要注意的是 這些變數之間也存在一些關係,比如 程序將訊號遮蔽字的2號為置為1,也就是說遮蔽sigint訊號,那麼但你向程序傳送該訊號時 ctrl c 該訊號必然處於未決狀態。那麼,訊號未決狀態字的2號位自然也就是1啦。訊號集操作函式 posix.1 定義了乙個資料型別sig...

Linux c 遮蔽訊號 切換訊號

訊號導致的問題 不是任何訊號我們都需要的,如果遇到我們不想處理的訊號,我們怎麼避免這個訊號?1.訊號遮蔽 intsigprocmask int how,操作方式 sig block遮蔽訊號 sig unblock剪除遮蔽訊號 sig setmask修改遮蔽訊號 constsigset t sigs,...

Linux 訊號阻塞與遮蔽

1.sigprocmask函式提供遮蔽和解除遮蔽訊號的功能。從而實現關鍵 的執行不被打斷。函式宣告如下 int sigprocmask int how,const sigset t set,sigset t oldset 其中引數 how可設定的引數為 sig block,sig unblock,s...