Linux訊號專題FAQ

2021-08-22 04:32:55 字數 821 閱讀 4973

​   參考可重入、執行緒安全和非同步訊號安全,需要強調的是非同步訊號安全,這個概念知道的人不多,平常大家在編寫**的時候也很少考慮這個因素,也不清楚哪些函式是非同步訊號安全的,哪些不是,典型的像printf就不是非同步訊號安全的,內部會加鎖,但是平時很多人都喜歡在訊號處理函式中呼叫。大多數情況下都不會出現問題的,所以讓使用者錯誤的認為這是正確的寫法。第二個需要注意的是可重入的概念,linux有很不少系統呼叫的實現都是不可重入的,會將結果儲存在內部的靜態資料儲存中,同時這類系統呼叫也提供了可重入版本的實現,其函式名就是尾部新增_r來標識。

​ 如上圖所示乙個程序/執行緒就是乙個task_struct結構,該結構包含了屬於這個程序/執行緒的阻塞訊號集、pending的訊號等,所有投遞到該程序/執行緒的訊號都會通過雙向鍊錶組織在一起,鍊錶的元素是sigqueue,所有的訊號對應的訊號處理函式存放在sighand_struct中的乙個型別為k_sigaction陣列,每次程式由核心態切換到使用者態時,核心都會發起訊號處理,執行訊號處理程式的時候為了避免對核心產生影響,所以使用的是使用者棧,還可以自定義訊號處理的備用棧。

​ 訊號處理函式是每次程式從核心態切換到使用者態的時候,核心才會負責發起訊號處理,也就是說訊號處理的時機有以下兩種:

​   通過檢視/proc/pid/status檔案,該檔案中有幾個字端的值,這些值按照十六進製制的形式顯示,最低的有效位表示訊號1,相鄰的左邊一位代表訊號2,依次類推,例如下面這幾個數值:

空間譜專題01 訊號模型

一 訊號基本模型 根據波動方程,對於球面座標 可以得出單頻解 當訊號距離接收單元距離非常遠 l 時,即可認為遠場,這時候球面波可近似看作平面波 對應的解 其中k 2pi 稱為波數向量,其大小表示單位波長的週期數。二 窄帶訊號 a 窄帶定義 關於窄帶訊號的定義不唯一,先從實際情況入手分析分析,例如一般...

linux訊號 阻塞訊號

1.訊號在核心中的表示 我們知道了訊號產生的各種原因,而實際執行訊號處理的動作,叫做訊號遞達 delivery 訊號從產生到遞達之間的狀態,稱為訊號未決 pending 程序可以選擇阻塞 block 某個訊號。被阻塞的訊號產生時將保持在未決狀態,直到程序解除對此訊號的阻塞,才執行遞達的動作。注意,阻...

空間譜專題16 訊號個數估計

前言 記錄陣列訊號在doa估計中,信源個數估計的基本方法。一 基本估計方法參考 王永良 空間譜估計 p42 以mdl為例 function num,a mdl est rx,ssnum ssnum 快拍數 t ssnum arrnum size rx,1 k arrnum u,s,v svd rx ...