信號之sigsuspend函數理解

在這裏插入圖片描述
上圖是一個進程PCB中管理的兩個集合:1)未決信號集 2)屏蔽信號集
這兩個集合都是位圖,也就是64個信號一個佔1bit.
當觸發一個信號以後,未決信號集中立馬將0變爲1,然後根據設定的處理過程去處理信號的時候1變爲0。屏蔽信號集就是當某個設定爲1的時候,觸發一個信號,未決信號集中也相應變爲1,但是這個時候,這個信號是無法處理的,只有等待屏蔽信號集解除,即1-》0後,這纔去處理。

sigsuspend這個函數專門來解決當於

sigprocmask(SIG_SETMASK, &mask, &prevMask);//將信號屏蔽字設爲mask,並將之前的信號屏蔽字保存在preMask中 #1#
pause();//阻塞進程直到有信號產生  #2#
sigprocmask(SIG_SETMASK, &prevMask, NULL);//恢復信號屏蔽字爲之前的preMask中(#1#之前的信號屏蔽字) #3#

開始的時候將準備接收的信號全部設定爲屏蔽,相應的屏蔽集合0-》1
信號產生後,將屏蔽集清空(恢復原來0),這樣收到的信號就可以開始處理了。主要起一個懸掛進程的作用

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