欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
linux的信號機制

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

#include 
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)); 
int sigpending(sigset_t *set)); 
int sigsuspend(const sigset_t *mask));
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Linux環(huán)境進(jìn)程間通信(二): 信號(下)
Linux環(huán)境進(jìn)程間通信:信號
Linux信號(signal) 機制分析
sigqueue
Linux | 一篇文章徹底搞定信號!
多線(xiàn)程的信號處理
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久