看到網上大部分解釋都是抄來抄去的,結果說不清楚,最後還是不理解,於是花了幾個小時研究了下,感覺大體上明白了。希望本文能對你有用處。
1)標頭檔案:#include
2)乙個保護臨界區**的錯誤例項:(sigprocmask()和pause()實現)
#include #include #include void handler(int sig) //訊號處理函式的實現
int main()
上面例項的問題是:本來期望pause()之後,來sigint訊號,可以結束程式;可是,如果當「取消阻塞」和「pause」之間,正好來了sigint訊號,結果程式因為pause的原因會一直掛起。。。
解決的方式,當然是sigsuspend()函式了。
3)使用sigsuspend()的程式
#include #include #include void handler(int sig) //訊號處理程式
int main()
sigsuspend的原子操作是:
(1)設定新的mask阻塞當前程序(上面是用wait替換new,即阻塞sigusr1訊號)
(2)收到sigusr1訊號,阻塞,程式繼續掛起;收到其他訊號,恢復原先的mask(即包含sigint訊號的)。
(3)呼叫該程序設定的訊號處理函式(程式中如果先來sigusr1訊號,然後過來sigint訊號,則訊號處理函式會呼叫兩次,列印不同的內容。第一次列印sigint,第二次列印sigusr1,因為sigusr1是前面阻塞的)
(4)待訊號處理函式返回,sigsuspend返回了。(sigsuspend將捕捉訊號和訊號處理函式整合到一起了)
sigsuspend 函式 解釋
sigsuspend函式作用 如果在等待訊號發生時希望去休眠,則使用sigsuspend函式是非常合適的 標頭檔案 include 乙個保護臨界區 的錯誤例項 sigprocmask 和pause 實現 include include include void handler int sig 訊號處...
sigsuspend函式和sigwait函式
include int sigsuspend const sigset t mask sigsuspend函式是等待某個訊號到達,然後呼叫處理函式之後才返回的,否則會處於阻塞等待狀態。unix環境高階程式設計的sleep函式就是通過alarm函式和sigsuspend函式來實現的。但是當我自己寫了乙...
ngx process options函式詳解
ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...