Linux C系統程式設計 訊號與定時器的使用

2021-09-23 01:20:09 字數 1013 閱讀 4627

#include #include void do_alarm(int num);

int main(void)

//alarm

3秒之後傳送sigalrm訊號,但是一次性的 sigalrm訊號:定時器的訊號

alarm(3);

while(1)

return 0 ;

}void do_alarm(int num)

執行結果:

this is in main... 

this is in alarm ... &*&&

this is in main... 

this is in alarm ... &*&&

this is in main... 

this is in alarm ... &*&&

this is in main... 

在這個標頭檔案中。

signal(引數1,引數2);

引數1:我們要進行處理的訊號。系統的訊號我們可以再終端鍵入 kill -l檢視(共64個)。其實這些訊號時系統定義的巨集。

引數2:我們處理的方式(是系統預設還是忽略還是捕獲),這裡我寫了乙個處理函式,也就是說這裡不是系統預設的。

unsigned int alarm(unsigned int seconds);

引數1:表示指定的秒數。

要注意的是,乙個程序只能有乙個鬧鐘時間,如果在呼叫alarm之前已設定過鬧鐘時間,則任何以前的鬧鐘時間都被新值所代替。需要注意的是,經過指定的秒數後,訊號由核心產生,由於程序排程的延遲,所以程序得到控制從而能夠處理該訊號還需要一些時間。如果有以前為程序登記的尚未超時的鬧鐘時鐘,而且本次呼叫的seconds值是0,則取消以前的鬧鐘時鐘,其餘留值仍作為alarm函式的返回值。

以上程式是利用定時器產生的乙個訊號sigalrm訊號,在收到該訊號同時會呼叫do_alarm函式。這也就類似微控制器的定時中斷,當定時到了,就跳到中斷服務函式裡去執行相應的程式。

Linux系統程式設計 訊號

0x00 訊號和中斷類似,中斷是硬體發出,而訊號由軟體發出。訊號常用於程序間通訊,乙個訊號常見的處理如下 1 設定對應訊號的訊號處理函式。2 當訊號來臨時,打斷正常執行的程式 本質上是在系統呼叫前檢查是否有訊號的到來 去執行訊號處理函式。3 訊號處理函式執行完,繼續執行原程式。0x01 我們先來看一...

Linux系統程式設計 訊號

基本概念 訊號的狀態 產生未決狀態 沒有被處理的 遞達 已經被處理的 訊號的優先順序比較高 程序收到訊號之後,暫停正在處理的工作 訊號集 kill 發射訊號給某個程序 raise 自己給自己發訊號 函式原型 int raise int sig abort 給自己傳送異常終止的訊號 alarm 設定定...

Linux系統程式設計 訊號

訊號的共性 1.簡單 2.不能攜帶大量資訊 3.滿足特定條件才能傳送 訊號的機制 1.訊號是軟體層面的中斷。一旦訊號產生,無論程式執行到什麼位置都必須結束 2.所有訊號的產生以及處理都是核心產生.訊號的產生 1.按鍵產生 程ctrl c ctrl v 2.系統呼叫產生 kill函式 3.定時器 al...