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