訊號機制是程序之間相互傳遞訊息的一種方法,訊號全稱為軟中斷訊號,也有人稱作軟中斷。從它的命名可以看出,它的實質和使用很象中斷。所以,訊號可以說是程序控制的一部分。
程序之間可以互相通過系統呼叫kill傳送軟中斷訊號。
核心也可以因為內部事件而給程序傳送訊號,通知程序發生了某個事件。
注意,訊號只是用來通知某程序發生了什麼事件,並不給該程序傳遞任何資料。
看看這麼乙個場景:
1.使用者在shell上啟動乙個程序在前台執行;
2.使用者想要放棄該程序執行,按下ctrl-c,此時硬碟驅動會產生乙個中斷給linux核心;
3.如果當前cpu在執行前台程序,則收到該中斷後,linux核心會暫停程序執行,進入核心態;
4.這個中斷被翻譯成sigint訊號,記錄到該程序的pcb中(稱為核心向程序傳送了乙個sigint訊號);
5.當核心要回到該程序前,會先查詢該程序的pcb,發現裡面有個訊號sigint,而該訊號的預設處理是終止程序,於是核心排程就不再返回該程序了,而是終止該程序。
在linux shell上執行kill -l命令:
kill -l
1) sighup 2) sigint 3) sigquit 4) sigill
5) sigtrap 6) sigabrt 7) sigbus 8) sigfpe
9) sigkill 10) sigusr1 11) sigsegv 12) sigusr2
13) sigpipe 14) sigalrm 15) sigterm 16) sigstkflt
17) sigchld 18) sigcont 19) sigstop 20) sigtstp
21) sigttin 22) sigttou 23) sigurg 24) sigxcpu
25) sigxfsz 26) sigvtalrm 27) sigprof 28) sigwinch
29) sigio 30) sigpwr 31) sigsys 34) sigrtmin
35) sigrtmin+1 36) sigrtmin+2 37) sigrtmin+3 38) sigrtmin+4
39) sigrtmin+5 40) sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8
43) sigrtmin+9 44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12
47) sigrtmin+13 48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14
51) sigrtmax-13 52) sigrtmax-12 53) sigrtmax-11 54) sigrtmax-10
55) sigrtmax-9 56) sigrtmax-8 57) sigrtmax-7 58) sigrtmax-6
59) sigrtmax-5 60) sigrtmax-4 61) sigrtmax-3 62) sigrtmax-2
63) sigrtmax-1 64) sigrtmax
列出的就是linux系統訊號值。
乙個程序收到系統訊號有3種處理方式:
1.按照程序自定義方式處理:提供乙個訊號處理函式,要求核心在處理該訊號時切換到使用者態執行這個處理函式,這種方式稱為捕捉(catch)乙個訊號,sigkill和sigstop訊號不能被catch
2.按照預設處理方式處理:對大部分的訊號的預設操作是使得程序終止;
3.忽略訊號:但是有兩個訊號不能忽略sigkill和sigstop。
關於這點,我想多說下,聯絡到我們寫daemon程式裡的**
signal(sigint, sig_ign);
signal(sighup, sig_ign);
signal(sigquit, sig_ign);
signal(sigpipe, sig_ign);
signal(sigttou, sig_ign);
signal(sigttin, sig_ign);
signal(sigchld, sig_ign);
這段**就是表示daemon程序忽略這些訊號。
在程序表的表項中有乙個軟中斷訊號域,該域中每一位對應乙個訊號,當有訊號傳送給程序時,對應位置位。由此可以看出,程序對不同的訊號可以同時保留,但對於同乙個訊號,程序並不知道在處理之前來過多少個。
訊號與中斷的相似點:
1)採用了相同的非同步通訊方式;
2)當檢測出有訊號或中斷請求時,都暫停正在執行的程式而轉去執行相應的處理程式;
3)都在處理完畢後返回到原來的斷點;
4)對訊號或中斷都可進行遮蔽。
訊號與中斷的區別:
1)中斷有優先順序,而訊號沒有優先順序,所有的訊號都是平等的;
2)訊號處理程式是在使用者態下執行的,而中斷處理程式是在核心態下執行;
3)中斷響應是及時的,而訊號響應通常都有較大的時間延遲。
Linux訊號的基本概念
天天在用訊號,它的概念你可知道地準確?訊號機制是一種使用訊號來進行程序之間傳遞資訊 的方法,其中訊號的全稱為軟中斷訊號,簡稱軟中斷。訊號只是用 來通知程序發生了什麼事情,並不給程序傳遞資料。訊號都有乙個預設值,且有3種處理方式 退出,忽視,註冊函式。訊號的幾個缺點 1.系統開銷太大 2.傳送訊號的程...
linux訊號的基本概念
訊號 訊號 是乙個軟體中斷 通知程序發生了某件事情,中斷程序當前操作 讓程序去處理這件事。前提 必須識別這個訊號 訊號種類有很多。每個都代表不同事件。訊號是有生命週期 產生 註冊 登出 處理 阻塞 阻止訊號被處理 作業系統中定義的訊號種類 檢視訊號種類 kill l 總共62種,1 31非可靠訊號 ...
Linux訊號(一) 訊號的基本概念
訊號是軟體中斷,很多比較重要的應用程式都需要處理訊號。訊號是一種程序之間或者核心與程序間非同步通訊的一種機制,例如 使用者在終端鍵入中斷鍵,會通過訊號機制停止乙個程式。每個訊號都有乙個名字 以sig開頭 例如,sigabrt是夭折訊號,當程序呼叫abort函式是產生這種訊號 sigalrm是鬧鐘訊號...