訊號遞達(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...