不可靠訊號pk可靠訊號
q linux訊號機制基本上是從unix系統中繼承過來的。早期unix系統中的訊號機制比較簡單和原始,後來在實踐中暴露出一些問題,它的主要問題是:
q 程序每次處理訊號後,就將對訊號的響應設定為預設動作。在某些情況下,將導致對訊號的錯誤處理;因此,使用者如果不希望這樣的操作,那麼就要在訊號處理函式結尾再一次呼叫signal(),重新安裝該訊號。
q 早期unix下的不可靠訊號主要指的是程序可能對訊號做出錯誤的反應以及訊號可能丟失。
q linux支援不可靠訊號,但是對不可靠訊號機制做了改進:在呼叫完訊號處理函式後,不必重新呼叫該訊號的安裝函式(訊號安裝函式是在可靠機制上的實現)。因此,linux下的不可靠訊號問題主要指的是訊號可能丟失。
總結:unix訊號機制不可靠地方,1)處理完訊號以後,需要重新再註冊訊號;2)訊號可能丟失。linux下已經對1做了優化。
可靠訊號
q 隨著時間的發展,實踐證明,有必要對訊號的原始機制加以改進和擴充。所以,後來出現的各種unix版本分別在這方面進行了研究,力圖實現"可靠訊號"。由於原來定義的訊號已有許多應用,不好再做改動,最終只好又新增加了一些訊號,並在一開始就把它們定義為可靠訊號,這些訊號支援排隊,不會丟失。同 時,訊號的傳送和安裝也出現了新版本:訊號傳送函式sigqueue()及訊號安裝函式sigaction()。
總結:sigaction和signal函式,都是呼叫核心服務do_signal函式;
核心服務函式(應用系統無法呼叫的函式)
實時訊號(都是可靠訊號)和非實時訊號(不可靠訊號)
q 早期unix系統只定義了32種訊號,ret hat7.2支援64種訊號,編號0-63(sigrtmin=31,sigrtmax=63),將來可能進一步增加,這需要得到核心的支援。前32種訊號已經有了預定義值,每個訊號有了確定的用途及含義,並且每種訊號都有各自的預設動作。如按鍵盤的ctrl+c時,會產生sigint訊號,對該訊號的預設反應就是程序終止。後32個訊號表示實時訊號,等同於前面闡述的可靠訊號。這保證了傳送的多個實時訊號都被接收。實時訊號是posix標準的一部分,可用於應用程序。
q 非實時訊號都不支援排隊,都是不可靠訊號;實時訊號都支援排隊,都是可靠訊號。
實時訊號和非實時訊號
man 7 signal 檢視手冊
非實時訊號都不支援排隊,都是不可靠訊號;實時訊號都支援排隊,都是可靠訊號
複製去google翻譯
24 可靠訊號與不可靠訊號
以下整理 自 1 1 可靠訊號與不可靠訊號 1 訊號值小於 sigrtmin red hat 7.2 中,sigrtmin 32 sigrtmax 63 的訊號都是不可靠訊號。主要問題如下 程序每次處理訊號後,就將對訊號的響應設定為預設動作。在某些情況下,將導致對訊號的錯誤處理 因此,使用者如果不希...
原始碼 訊號可靠訊號不可靠訊號相關
file main.c author luv letter created on 2017年3月14日,下午4 33 include include include include 3 訊號可靠訊號不可靠訊號相關 程式設計程式,要去實現如下功能 父程序建立子程序1和子程序2 子程序1向子程序2傳送可...
10 4 不可靠訊號
在早期版本的unix系統中 比如說版本7 訊號是不可靠的,意思是說訊號可能丟失 乙個訊號出現,但是程序可能永遠也不知道它,aslo,a process had little conrol over a signal a process could catch the signal or ignore...