Linux Linux程序訊號2

2021-09-25 04:57:24 字數 1354 閱讀 5037

我們在 linux程序訊號1中學習了什麼是程序訊號,訊號如何產生等,今天我們繼續學習一些關於程序訊號相關的知識

訊號相關的其他常見概念

訊號在核心中的表示

訊號集操作函式我們前面一直提訊號的捕捉或者遞達這一概念,那麼在作業系統中到底是什麼時候進行訊號的捕捉呢?我們依舊使用一張圖來表達我們的流程:

核心如何實現訊號的捕捉

此函式有兩個引數,第乙個引數sig為要設定的訊號,第二個引數為接收到此訊號後你所要執行的函式的函式指標,第二個引數還給我們了三個巨集的選擇

1.sig_err   //返回錯誤

2.sig_dfl //執行訊號預設操作

3.sig_ign //忽略訊號

如果執行成功,此函式返回上一次對此訊號的設定,如果設定多次,最終者為最近設定的一次,如果設定失敗,將返回sig_err的錯誤。話不多說,我們一起來用用這個函式。

**非常簡單,相信你仔細看一定看的懂,handler的引數就是我們捕獲到的信號碼,這裡要說的是,2號訊號實際上就是我們按ctrl + c 給程序傳送的訊號,原來缺省會讓程序終止,現在我們讓他執行我們自定義的行為列印handler函式中的句子。(無法終止程序的同學按ctrl + z即可)

signal訊號安裝函式很簡單,他只能提供簡單的訊號安裝操作,所以逐步被淘汰,因此linux提供了功能更強大的sigaction函式

struct sigaction
對了,別忘了我們要呼叫sa_sigaction時與他配合的sa_flags,這裡我們來看幾個常用的選項

現在了解了更多,不妨這次我們使用sa_sigaction成員試試看:

想必講到這大家應該也基本上了解了signal和sigaction兩個函式的使用了,其實不難理解。

我們剛剛在訊號捕捉中講到的signal函式嗎,它就是乙個可重入函式,也就代表他是乙個不可靠的訊號函式。

因此這也就是為什麼signal函式逐漸被淘汰的原因,而sigaction則不會出現這種情況。

不可重入函式

程序訊號(2)

理解訊號遞達和阻塞的概念和原理 首先我們看一下什麼是阻塞訊號?阻塞訊號 1 訊號其他相關概念 實際執行訊號的處理動作稱為訊號遞達 delivery 訊號遞達有三種方式 1 忽略 2 預設動作 3 自定義捕捉 訊號從產生到遞達之間的狀態,稱為訊號未決 pending 程序可以選擇阻塞 block 某個...

linux linux程序指令

1.linux有哪些程序 linux下的主要程序狀態有 2.1 r task running 可執行狀態 通過將程序的task struct結構放到cpu的可執行佇列中,使程序變成r態。只有處在該狀態的程序才有可能被程序排程器選中在cpu上執行 2.2 s task interruptible 可中...

linux linux程序記憶體分析

在產品的開發中,通過對當前系統消耗記憶體總量的統計,可以對產品所需記憶體總量進行精確的評估,從而選擇合適的記憶體晶元與大小,降低產品的成本。在遇到記憶體洩露類問題時,經常會對此束手無策,本文通過對proc下程序相關的檔案進行分析,精確評估系統消耗記憶體的大小,還可以對記憶體洩露類問題的解決提供一種定...