久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

linux的信號機制

 木芙蓉的圖書館 2011-04-07

一,、信號及信號來源 
信號本質(zhì) 
信號是在軟件層次上對中斷機制的一種模擬,在原理上,,一個進程收到一個信號和處理器收到一個中斷請求能夠說是相同的,。信號是異步的,一個進程不必通過任何操作來等待信號的到達,,事實上,,進程也不知道信號到底什么時候到達。 
信號是進程間通信機制中唯一的異步通信機制,,能夠看作是異步通知,,通知接收信號的進程有哪些事情發(fā)生了。信號機制經(jīng)過實時擴展后,,功能更加強大,,除了基本通知功能外,,還能夠傳遞附加信息,。 
信號來源 
信號事件的發(fā)生有兩個來源:硬件來源(比如我們按下了鍵盤或其他硬件故障);軟件來源,,最常用發(fā)送信號的系統(tǒng)函數(shù)是kill, raise, alarm和setitimer連同sigqueue函數(shù),,軟件來源還包括一些非法運算等操作。 
二,、信號的種類 
能夠從兩個不同的分類角度對信號進行分類:(1)可靠性方面:可靠信號和不可靠信號,;(2)和時間的關(guān)系上:實時信號和非實時信號。在《Linux環(huán)境進程間通信(一):管道及有名管道》的附1中列出了系統(tǒng)所支持的任何信號,。 ! 
1,、可靠信號和不可靠信號 
"不可靠信號" 
Linux信號機制基本上是從Unix系統(tǒng)中繼承過來的,。早期Unix系統(tǒng)中的信號機制比較簡單和原始,后來在實踐中暴露出一些問題,,因此,,把那些建立在早期機制上的信號叫做"不可靠信號",信號值小于SIGRTMIN(Red hat 7.2中,,SIGRTMIN=32,,SIGRTMAX=63)的信號都是不可靠信號。這就是"不可靠信號"的來源,。他的主要問題是: 
• 進程每次處理信號后,,就將對信號的響應(yīng)配置為默認(rèn)動作。在某些情況下,,將導(dǎo)致對信號的錯誤處理,;因此,用戶假如不希望這樣的操作,,那么就要在信號處理函數(shù)結(jié)尾再一次調(diào)用signal(),,重新安裝該信號。 
• 信號可能丟失,,后面將對此周詳闡述,。 
因此,早期unix下的不可靠信號主要指的是進程可能對信號做出錯誤的反應(yīng)連同信號可能丟失,。 
Linux支持不可靠信號,,但是對不可靠信號機制做了改進:在調(diào)用完信號處理函數(shù)后,不必重新調(diào)用該信號的安裝函數(shù)(信號安裝函數(shù)是在可靠機制上的實現(xiàn)),。因此,,Linux下的不可靠信號問題主要指的是信號可能丟失。 
"可靠信號" 
隨著時間的發(fā)展,,實踐證實了有必要對信號的原始機制加以改進和擴充,。所以,后來出現(xiàn)的各種Unix版本分別在這方面進行了研究,,力圖實現(xiàn)"可靠信 號",。由于原來定義的信號已有許多應(yīng)用,不好再做改變,,最終只好又新增加了一些信號,,并在一開始就把他們定義為可靠信號,這些信號支持排隊,,不會丟失,。同時,信號的發(fā)送和安裝也出現(xiàn)了新版本:信號發(fā)送函數(shù)sigqueue()及信號安裝函數(shù)sigaction()。
信號值位于SIGRTMIN和SIGRTMAX之間的信號都是可靠信號,,可靠信號克服了信號可能丟失的問題,。Linux在支持新版本的信號安裝 函數(shù)sigation()連同信號發(fā)送函數(shù)sigqueue()的同時,仍然支持早期的signal()信號安裝函數(shù),,支持信號發(fā)送函數(shù)kill(),。 
注:不要有這樣的誤解:由sigqueue()發(fā)送、sigaction安裝的信號就是可靠的,。事實上,,可靠信號是指后來添加的新信號(信號值 位于SIGRTMIN及SIGRTMAX之間);不可靠信號是信號值小于SIGRTMIN的信號,。信號的可靠和不可靠只和信號值有關(guān),,和信號的發(fā)送及安裝 函數(shù)無關(guān)。現(xiàn)在linux中的signal()是通過sigation()函數(shù)實現(xiàn)的,,因此,,即使通過signal()安裝的信號,在信號處理函數(shù)的結(jié)尾 也不必再調(diào)用一次信號安裝函數(shù),。同時,,由signal()安裝的實時信號支持排隊,同樣不會丟失,。 
對于現(xiàn)在linux的兩個信號安裝函數(shù):signal()及sigaction()來說,,他們都不能把SIGRTMIN以前的信號變成可靠信號 (都不支持排隊,仍有可能丟失,,仍然是不可靠信號),,而且對SIGRTMIN以后的信號都支持排隊。這兩個函數(shù)的最大區(qū)別在于,,經(jīng)過sigaction安裝的信號都能傳遞信息給信號處理函數(shù)(對任何信號這一點都成立),,而經(jīng)過signal安裝的信號卻不能向信號處理函數(shù)傳遞信息。對于信號發(fā)送函數(shù)來說也是相同的,。 . 
2,、實時信號和非實時信號 
早期Unix系統(tǒng)只定義了32種信號,Ret hat7.2支持64種信號,,編號0-63(SIGRTMIN=31,,SIGRTMAX=63),將來可能進一步增加,,這需要得到內(nèi)核的支持,。前32種信號已有了預(yù)定義值,每個信號有了確定的用途及含義,,并且每種信號都有各自的缺省動作。如按鍵盤的CTRL ^C時,會產(chǎn)生SIGINT信號,,對該信號的默認(rèn)反應(yīng)就是進程終止,。后32個信號表示實時信號,等同于前面闡述的可靠信號,。這確保了發(fā)送的多個實時信號都 被接收,。實時信號是POSIX標(biāo)準(zhǔn)的一部分,可用于應(yīng)用進程,。 
非實時信號都不支持排隊,,都是不可靠信號;實時信號都支持排隊,,都是可靠信號,。 
三、進程對信號的響應(yīng) 
進程能夠通過三種方式來響應(yīng)一個信號:(1)忽略信號,,即對信號不做任何處理,,其中,有兩個信號不能忽略:SIGKILL及SIGSTOP,; (2)捕獲信號,。定義信號處理函數(shù),當(dāng)信號發(fā)生時,,執(zhí)行相應(yīng)的處理函數(shù),;(3)執(zhí)行缺省操作,Linux對每種信號都規(guī)定了默認(rèn)操作,。注意,,進程對實時信號的缺省反應(yīng)是進程終止。 
Linux究竟采用上述三種方式的哪一個來響應(yīng)信號,,取決于傳遞給相應(yīng)API函數(shù)的參數(shù),。 
四、信號的發(fā)送 . 
發(fā)送信號的主要函數(shù)有:kill(),、raise(),、 sigqueue()、alarm(),、setitimer()連同abort(),。 
五、信號的安裝(配置信號關(guān)聯(lián)動作) 
假如進程要處理某一信號,,那么就要在進程中安裝該信號,。安裝信號主要用來確定信號值及進程針對該信號值的動作之間的映射關(guān)系,,即進程將要處理哪個信號,;該信號被傳遞給進程時,將執(zhí)行何種操作,。 
linux主要有兩個函數(shù)實現(xiàn)信號的安裝:signal()、sigaction(),。其中signal()在可靠信號系統(tǒng)調(diào)用的基礎(chǔ)上實現(xiàn), 是庫函數(shù),。他只有兩個參數(shù),不支持信號傳遞信息,,主要是用于前32種非實時信號的安裝,;而sigaction()是較新的函數(shù)(由兩個系統(tǒng)調(diào)用實現(xiàn): sys_signal連同sys_rt_sigaction),有三個參數(shù),,支持信號傳遞信息,,主要用來和 sigqueue() 系統(tǒng)調(diào)用配合使用,當(dāng)然,,sigaction()同樣支持非實時信號的安裝,。sigaction()優(yōu)于signal()主要體現(xiàn)在支持信號帶有參數(shù)。
六,、信號集及信號集操作函數(shù): 
信號集被定義為一種數(shù)據(jù)類型: 
typedef struct { 
unsigned long sig[_NSIG_WORDS],; 
} sigset_t 
信號集用來描述信號的集合,linux所支持的任何信號能夠全部或部分的出現(xiàn)在信號集中,,主要和信號阻塞相關(guān)函數(shù)配合使用,。
七、信號阻塞和信號未決: 
每個進程都有一個用來描述哪些信號遞送到進程時將被阻塞的信號集,,該信號集中的任何信號在遞送到進程后都將被阻塞,。下面是和信號阻塞相關(guān)的幾個函數(shù): 

#include 
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)); 
int sigpending(sigset_t *set)); 
int sigsuspend(const sigset_t *mask)),;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多