Linux程序訊號筆記總結

2021-09-11 05:34:05 字數 1316 閱讀 3129

訊號:

作用:為了通知我們某個事件的發生

就是乙個軟中斷,通知程序發生某件事情,打斷程序當前的操作,去先處理這個事件

必須認識訊號,訊號不是立即處理的。而實現記錄下來,選擇乙個合適的事機處理

訊號必須有預設的處理方式,當然也可以改變。訊號是可以被阻塞,暫時不處理

訊號的週期性:生命週期:產生》註冊》登出》處理

linux訊號的種類:kill -l 62個--兩類(可靠/非可靠   實時/非實時)

產生:硬體中斷:程式異常;軟體中斷(kill raise abort alarm sigqueue)

coredup:程式異常崩潰時記錄執行資料;除錯;ulimit -c,

註冊:新增節點

分為可靠訊號的註冊:不管訊號的點陣圖是否為1,(訊號是否註冊)都要新增乙個新的節點

與非可靠訊號的註冊:若位圖為1,代表訊號已經註冊過了,因此什麼都不做(第二次到來的訊號丟棄)

登出:刪除節點,點陣圖置0

分為可靠訊號的登出:刪除節點,若仍有相同訊號的節點,就不修改點陣圖k,否則將位圖置0

非可靠訊號的登出:刪除節點,位圖直接置0

處理:預設 忽略  自定義   (signal sigaction) 訊號的捕捉流程--》訊號被註冊後如何處理(針對自定義訊號)

訊號是再程序從核心態執行返回使用者態的時候,進行處理的;

阻塞:暫時阻塞訊號被遞達;pcb中有乙個blocked訊號位圖,這個位圖用於標記有哪些訊號被阻塞

task_struct 中有乙個sigset_ blocked 點陣圖與pending進行異或,就能將被處理的訊號找出來

從pening中拿出訊號,再在blocked中看一下是否被處理

訊號的遞達:乙個動作,描述的是訊號的處理

訊號的未決:一種狀態,描述的是訊號從註冊成功到處理之前的狀態

訊號是會打斷當前阻塞操作

重入/不可重入函式:競態條件

乙個函式在多個執行流的競爭條件下執行,如果多個執行流的爭搶執行不會對其他執行流造成影響,這個函式就稱之為可重入函式,否則就是乙個不可重入函式

如果乙個函式內部涉及到參與全域性資料的修改,並且這個操作是不受保護的,非原子的,那麼這個函式就是乙個不可重入函式;否則就是可重入函式

volatile:是乙個關鍵字,用於修飾乙個變數,保持這個變數的記憶體可見性,防止編譯器過度優化

sigchld訊號:

殭屍程序是怎麼產生的?

我們前面避免殭屍程序的,是建立了子程序之後就進行程序等待,一直堅持等待是因為不知道什麼時候作業系統的通知才能過來,因此一直進行等待;如果知道子程序的退出通知是什麼時候來的,就不需要一直進行等待;作業系統通知父程序其實就是通過slgchld訊號進行通知

linux 程序學習筆記 程序訊號sigal

訊號 或軟中斷 是在軟體層次上對中斷的乙個模擬,其執行在 使用者空間 乙個程序對另外乙個或幾個程序通過傳送訊號來實現非同步通訊。當接收程序接收到訊號後,其可以註冊一下處理函式來說對這些訊號進行處理 也可以選擇忽略該訊號或者採用系統預設的處理方式 我看可以通過 kill l 命令來檢視系統支援的訊號,...

總結 程序訊號

作業系統內部的互動機制。1.通過終端按鍵產生訊號 ctrl c ctrl sigint的預設處理動作是終止程序,sigquit的預設處理動作是終止程序並且core dump core dump叫做核心轉儲,當乙個程序要異常終止時 通常是有bug 可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上。...

Linux 程序訊號

概念 訊號是程序之間事件非同步通知的一種方式,屬於軟中斷。訊號處理常見方式 忽略此訊號。執行該訊號的預設處理動作。提供乙個訊號處理函式,要求核心在處理該訊號時切換到使用者態執行這個處理函式,這種方式稱為捕捉 catch 乙個訊號。產生訊號 捕捉訊號 核心如何實現訊號的捕捉 如果訊號的處理動作是使用者...