sigsuspend 與sigwait 的區別

sigsuspend 與sigwait 的區別
sigsuspend(const sigset_t *mask):設置阻塞信號爲mask,等待其他信號(除mask之外的信號)的發生,若信號發生且對應的handler已執行,則返回-1,並設置相應的errno(已發生的信號值)。

注意:sigsuspend 總是返回-1
在程序執行到suspend之前發生的信號將不會被sigsuspend捕獲
sigsuspend調用改變進程的信號掩碼狀態,阻塞mask 中的信號,調用返回時將掩碼改爲調用前的狀態


sigwait(const sigset_t *mask, int *sig): 等待mask中的信號(任何一個即可)發生,若發生,設置*sig爲已發生的信號,返回0。如果出錯返回-1.

注意:sigwait並不等待hander執行發生的信號相當於被sigwait截獲,handler 根本不會被調用執行。
sigwait調用時自動取消mask中的信號掩碼狀態,直到有心得信號到達,返回時恢復線程的信號屏蔽字。

sigwait的調用
等待一個信號的發生

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章