日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux信号掩码线程,20.10 信号掩码(阻塞信号传递)

發布時間:2025/4/5 linux 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux信号掩码线程,20.10 信号掩码(阻塞信号传递) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

20.10? 信號掩碼(阻塞信號傳遞)

內核會為每個進程維護一個信號掩碼,即一組信號,并將阻塞其針對該進程的傳遞。如果將遭阻塞的信號發送給某進程,那么對該信號的傳遞將延后,直至從進程信號掩碼中移除該信號,從而解除阻塞為止。(由33.2.1節可知,信號掩碼實際屬于線程屬性,在多線程進程中,每個線程都可使用pthread_sigmask()函數來獨立檢查和修改其信號掩碼。)

向信號掩碼中添加一個信號,有如下幾種方式。

當調用信號處理器程序時,可將引發調用的信號自動添加到信號掩碼中。是否發生這一情況,要視sigaction()函數在安裝信號處理器程序時所使用的標志而定。

使用sigaction()函數建立信號處理器程序時,可以指定一組額外信號,當調用該處理器程序時會將其阻塞。

使用sigprocmask()系統調用,隨時可以顯式向信號掩碼中添加或移除信號。

對前兩種情況的討論將推遲到 20.13 節對sigaction()函數的介紹之后,現在先來討論sigprocmask()函數。

使用sigprocmask()函數既可修改進程的信號掩碼,又可獲取現有掩碼,或者兩重功效兼具。how參數指定了sigprocmask()函數想給信號掩碼帶來的變化。

SIG_BLOCK

將set指向信號集內的指定信號添加到信號掩碼中。換言之,將信號掩碼設置為其當前值和set的并集。

SIG_UNBLOCK

將set指向信號集中的信號從信號掩碼中移除。即使要解除阻塞的信號當前并未處于阻塞狀態,也不會返回錯誤。

SIG_SETMASK

將set指向的信號集賦給信號掩碼。

上述各種情況下,若oldset參數不為空,則其指向一個sigset_t結構緩沖區,用于返回之前的信號掩碼。

如果想獲取信號掩碼而又對其不作改動,那么可將set參數指定為空,這時將忽略how參數。

要想暫時阻止信號的傳遞,可以使用程序清單20-5中所示的一系列調用來阻塞信號,然后再將信號掩碼重置為先前的狀態以解除對信號的鎖定。

程序清單20-5:暫時阻塞信號傳遞

SUSv3規定,如果有任何等待信號因對sigprocmask()的調用而解除了鎖定,那么在此調用返回前至少會傳遞一個信號。換言之,如果解除了對某個等待信號的鎖定,那么會立刻將該信號傳遞給進程。

系統將忽略試圖阻塞SIGKILL和SIGSTOP信號的請求。如果試圖阻塞這些信號,sigprocmask()函數既不會予以關注,也不會產生錯誤。這意味著,可以使用如下代碼來阻塞除SIGKILL和SIGSTOP之外的所有信號:

【責任編輯:book TEL:(010)68476606】

點贊 0

總結

以上是生活随笔為你收集整理的linux信号掩码线程,20.10 信号掩码(阻塞信号传递)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。