linux訊號的基本概念

2021-09-26 02:23:26 字數 1654 閱讀 5326

訊號

訊號:是乙個軟體中斷;通知程序發生了某件事情,中斷程序當前操作;讓程序去處理這件事。

前提 :(必須識別這個訊號)

訊號種類有很多。每個都代表不同事件。

訊號是有生命週期:產生-》註冊-》登出-》處理     阻塞(阻止訊號被處理)

作業系統中定義的訊號種類:

檢視訊號種類: kill -l

總共62種,1-31非可靠訊號 (訊號有可能丟失)  34 -64:可靠訊號

訊號的產生:

硬體產生:ctrl +c中斷訊號,ctrl+ |  退出訊號 ctrl+z 停止執行當前程序

軟體產生:kill -signum pid  向程序傳送乙個signum訊號

unsiged int alarm(unsigned int seconds)

經過seconds秒之後,給自己傳送乙個sigalrm訊號--定時器,讓cpu去處理這個訊號,並且退出當前程序。

core dump:儲存程式的執行資訊

訊號在程序中的註冊:在程序pcb中做標記,標記收到了哪些訊號。

未決:是一種狀態----訊號從產生到處理之前所處的狀態。、

非可靠訊號註冊:判斷pcb中的pending點陣圖中相應訊號是否已經註冊(位圖是否為1);若未註冊則點陣圖修改為1,向sigqueue鍊錶中新增乙個訊號節點;若已註冊。則不做任何操作。

可靠訊號註冊:不管訊號是否已經註冊,都會向鍊錶中新增乙個新的訊號節點。

訊號在程序中的登出:

非可靠訊號:節點只有乙個。登出就是刪除節點,點陣圖置0;

可靠訊號:節點可能有多個,登出就是刪除乙個節點,判斷鍊錶中是否還有相同訊號的節點;若                       沒有則位圖置0;否則位圖不變依然需要標記有這個訊號待處理。

訊號的處理:

訊號的處理並不是立即被處理,而是選擇乙個合適的時機去處理訊號。

程序的執行從核心態返回使用者態的時候;

程序如何從使用者態切換到核心態:發起系統呼叫;程式異常,中斷。

程序執行的**若是庫函式或者使用者自己寫的函式,就說 當前程序執行在使用者態。

訊號處理有多種方式:

預設處理方式----既定義好的處理方式。

忽略處理方式-處理動作中什麼都沒做。

自定義處理方式---使用者自己定義訊號該如何處理。---自定義訊號的處理函式替換原有的處理函式。

訊號都是在核心態返回使用者態之前處理的。

訊號的阻塞:阻止訊號處理。

遞達:訊號依然可以註冊,只是暫時不處理。

在pcb中還有乙個集合--阻塞訊號集合--標記哪些訊號暫時不被處理。

在所有的訊號中,9號訊號sigkill和19號訊號sigstop,無法被阻塞,無法被自定義,無法被忽略。

可重入函式與不可重入函式:

函式的重入:多個執行流程同時執行進入相同的函式。

函式的可重入與不可重入:

可重入:多個執行流程同時執行進入相同的函式,不會造成資料二義性以及**邏輯混亂。

不可重入:多個執行流程同時執行進入相同的函式,有可能造成資料的二義性以及**的混亂。

當使用者設計乙個函式或使用乙個函式的時候在多個執行流中,那麼這時候就需要考慮函式是否可重入情況。

函式可重入與不可重入的關鍵點:

這個函式中是否對臨界資源(全域性資料)進行了非原子的操作。

Linux訊號的基本概念

天天在用訊號,它的概念你可知道地準確?訊號機制是一種使用訊號來進行程序之間傳遞資訊 的方法,其中訊號的全稱為軟中斷訊號,簡稱軟中斷。訊號只是用 來通知程序發生了什麼事情,並不給程序傳遞資料。訊號都有乙個預設值,且有3種處理方式 退出,忽視,註冊函式。訊號的幾個缺點 1.系統開銷太大 2.傳送訊號的程...

linux的訊號的基本概念

訊號機制是程序之間相互傳遞訊息的一種方法,訊號全稱為軟中斷訊號,也有人稱作軟中斷。從它的命名可以看出,它的實質和使用很象中斷。所以,訊號可以說是程序控制的一部分。程序之間可以互相通過系統呼叫kill傳送軟中斷訊號。核心也可以因為內部事件而給程序傳送訊號,通知程序發生了某個事件。注意,訊號只是用來通知...

訊號基本概念

sighup 終止程序 終端線路結束通話 sigint 終止程序 中斷程序 sigquit 建立core檔案終止程序,並且生成core檔案 sigill 建立core檔案 非法指令 sigtrap 建立core檔案 跟蹤自陷 sigbus 建立core檔案 匯流排錯誤 sigsegv 建立core檔...