不可靠的信号、可靠信号
一、不可靠信號
lnux信號機制基本上是從UNIX系統(tǒng)中繼承過來的。早期UNIX系統(tǒng)中的信號機制比較簡單和原始,后來在實踐中暴露一些問題,它的主要問題是:
1. 進程每次處理信號后,就將對信號的響應設置為默認動作,在某些情況下,將導致對信號的錯誤處理;因此,在用戶如果不希望這樣的操作,那么就要在信號處理函數(shù)結尾在一次調(diào)用signal(),重新安裝該信號。
2. 早期UNIX下的不可靠信號主要指的是進程可能對信號做出錯誤的反應以及信號可能丟失。
3. linux支持不可靠信號,但是對不可靠信號機制做出了改進:在調(diào)用完信號處理函數(shù)后,不必重新調(diào)用該信號的安裝函數(shù)(信號安裝函數(shù)是在可靠機制上是實現(xiàn)的)。因此,linux下的不可靠信號問題主要指的是信號可能丟失。
?
二、不可靠信號的發(fā)展
隨著時間的發(fā)展,實踐證明了有必要對信號的原始機制加以改進和擴充。所以,后來出現(xiàn)的各種UNIX版本分別在這方面進行了研究,力圖實現(xiàn)"可靠信號"。由于原來定義的信號已經(jīng)有許多應用,不好再做改動,最終只好又新增加了一些信號,并在一開始就把它們定義為可靠信號,這些信號支持排隊,不會丟失。
同時,信號的發(fā)送和安裝也出現(xiàn)了新版本:發(fā)送函數(shù)sigqueue()及信號安裝函數(shù)sigaction()。
早期UNIX系統(tǒng)只定義了32種信號,Ret hat7.2支持64種信號,編號0-63(SIGRTMIN = 31, SIGRTMAX = 63),將來可能進一步增加,這需要得到內(nèi)核的支持。前32種信號已經(jīng)有了預定義值,每個信號有了確定的用途和定義,并且每種信號都有各自缺省動作。如按鍵盤CTRL + C時,會產(chǎn)生SIGINT信號,對該信號的默認反應就是進程終止。后32個信號表示實時信號,等同前面闡述的可靠信號。這保證了發(fā)送的多個實時信號都被接收,實時信號是POSIX標準的一部分,可用于應用進程。
非實時信號都不支持排隊,都是不可靠信號;實時信號都支持排隊,都是可靠信號。
?
三、可靠信號術語和語義
執(zhí)行信號的處理動作稱作為遞達(Delivery),信號從產(chǎn)生到遞達之間的狀態(tài),稱之為信號未決(Pending),進程可以選擇阻塞(Block)某個信號。被阻塞的信號產(chǎn)生時將保持在未決狀態(tài),直到進程解除對信號的阻塞,才執(zhí)行遞達的動作。注意,阻塞和忽略是不同的,只要信號被阻塞就不會遞達,而忽略信號是在遞達之后可選的一種處理動作。信號在內(nèi)核中的表示可以看作是這樣的
總結
以上是生活随笔為你收集整理的不可靠的信号、可靠信号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷退票是全额退款吗
- 下一篇: 函数sigqueue