每個訊號都對應乙個正整數常量(稱為signal number,即訊號編號。定義在系統標頭檔案中),代表同一使用者的諸程序之間傳送事先約定的資訊的型別,用於通知某程序發生了某異常事件。每個程序在執行時,都要通過訊號機制來檢查是否有訊號到達。若有,便中斷正在執行的程式,轉向與該訊號相對應的處理程式,以完成對該事件的處理;處理結束後再返回到原來的斷點繼續執行。實質上,訊號機制是對中斷機制的一種模擬,故又把它稱為軟中斷。
(1)採用了相同的非同步通訊方式;
(2)當檢測出有訊號或中斷請求時,都暫停正在執行的程式而轉去執行相應的處理程式;
(3)都在處理完畢後返回到原來的斷點;
(4)對訊號或中斷都可進行遮蔽。
(1)中斷有優先順序,而訊號沒有優先順序,所有的訊號都是平等的;
(2)訊號處理程式是在使用者態下執行的,而中斷處理程式是在核心態下執行;
(3)中斷響應是及時的,而訊號響應通常都有較大的時間延遲。
(1)傳送訊號。傳送訊號的程式用系統呼叫kill( )實現;
(2)預置對訊號的處理方式。接收訊號的程式用signal( )來實現對處理方式的預置;
(3)收受訊號的程序按事先的規定完成對相應事件的處理。
當乙個程序要進入或退出乙個低優先順序睡眠狀態時,或乙個程序即將從核心態返回使用者態時,核心都要檢查該程序是否已收到軟中斷。當程序處於核心態時,即使收到軟中斷也不予理睬;只有當它返回到使用者態後,才處理軟中斷訊號。對軟中斷訊號的處理分三種情況進行:
(1)如果程序收到的軟中斷是乙個已決定要忽略的訊號(function=1),程序不做任何處理便立即返回;
(2)程序收到軟中斷後便退出(function=0);
(3)執行使用者設定的軟中斷處理程式。
int kill(pid,sig)引數定義
int pid,sig;
其中,pid是乙個或一組程序的識別符號,引數sig是要傳送的軟中斷訊號。
(1)pid>0時,核心將訊號傳送給程序pid。
(2)pid=0時,核心將訊號傳送給與傳送程序同組的所有程序。
(3)pid=-1時,核心將訊號傳送給所有使用者識別符號真正等於傳送程序的有效使用者標識號的程序。
signal(sig,function)預置對訊號的處理方式,允許呼叫程序控制軟中斷訊號。
1view code//@author 成鵬致遠2//
@net
@qq 552158509
45 #include 6 #include 7 #include 8 #include 9
10void signalhandle(int signal)//
訊號處理函式
1130}31
32int
main()
33
程序通訊 訊號
訊號是程序間通訊機制中唯一的非同步通訊機制。訊號的分類 根據可靠性 可靠訊號 不可靠訊號 根據與時間的關係 實時訊號 非實時訊號 程序可以通過下面三種方式來處理乙個訊號 1.忽略訊號 大多數訊號都按照這種方式進行處理,但有兩種訊號決不能被忽略,它們是 sigkill sigstop。這兩種訊號不能被...
程序通訊 訊號
程序通訊 訊號 產生訊號的條件 1 當使用者按某些按鍵時,產生訊號 2 硬體異常產生訊號 除數為0 無效的儲存訪問等等。這些情況通常由硬體檢測到,將其通知核心,然後核心產生適當的訊號通知程序,例如,核心對正訪問乙個無效儲存區的程序產生乙個sigsegv訊號 3 程序用kill函式將訊號傳送給另乙個程...
Linux程序間的通訊方式 訊號
訊號通訊 1 訊號的產生 訊號是程序間通訊中最為長久的方式,很多條件可以產生訊號,例如 當使用者按某些按鍵時,產生訊號 硬體異常產生訊號 除數為0 無效的儲存訪問等等。這些情況通常由硬體檢測到,將其通知核心,然後核心產生適當的訊號通知程序,例如,核心對正訪問乙個無效儲存區的程序產生乙個sigsegv...