理解SIGALRM訊號

2021-10-04 19:07:42 字數 915 閱讀 3182

sigalrm訊號是作業系統中的其中乙個訊號。他的作用是設定程序隔多久後會收到乙個sigalrm訊號。下面我們看一下他的實現原理。

alarm系統呼叫是設定多久觸發sigalrm訊號的函式。下面是他的宣告。

#include

unsigned

alarm

(unsigned seconds)

;

我們看看實現。

int

sys_alarm

(long seconds)

我們看到pcb中使用alarm欄位記錄了sigalrm訊號觸發的時間。我們再來看一下觸發的時機。

*

/void

schedule

(void)}

...}

在程序排程的時候,系統會處理sigalrm訊號的邏輯,判斷是否可以觸發sigalrm訊號了。是的話在pcb中打上標記。但是這時候如果該程序沒有被排程執行,那sigalrm訊號的函式會被延遲執行。即這裡只是記錄資訊的時機,不一定是執行的時機。

另外在父程序建立子程序的時候(fork),子程序不會繼承父程序的alarm資訊(重置為0),但是如果乙個程序設定了sigalrm然後通過execve系列函式執行新的程式時,alarm資訊會被繼承下來。最後我們看一下用法。

#include

#include

#include

#include

void

handle_alarm()

intmain

(int argc,

char

*ar**)

}

程序在10秒或10秒之後觸發sigalrm訊號,然後執行訊號處理函式,最後退出。

SIGALRM訊號和SIGCHID訊號

在進行堵塞式系統呼叫時。為避免程序陷入無限期的等待,能夠為這些堵塞式系統呼叫設定定時器。linux提供了alarm系統呼叫和sigalrm訊號實現這個功能。要使用定時器。首先要安裝sigalrm訊號。假設不安裝sigalrm訊號,則程序收到sigalrm訊號後。預設的動作就是終止當前程序。sigal...

強 SIGALRM訊號和SIGCLD訊號

8.5.1 sigalrm訊號 在進行阻塞式系統呼叫時,為避免程序陷入無限期的等待,可以為這些阻塞式系統呼叫設定定時器。linux提供了alarm系統呼叫和sigalrm訊號實現這個功能。要使用定時器,首先要安裝sigalrm訊號。如果不安裝sigalrm訊號,則程序收到sigalrm訊號後,預設的...

訊號量的理解

什麼是semaphore 訊號量 訊號量 semaphore 是在多執行緒環境下使用的一種設施,它負責協調各個執行緒,以保證它們能夠正確 合理的使用公共資源。舉例 我們來看看乙個停車場是怎樣運作的。為了簡單起見,假設停車場只有三個車位,一開始三個車位都是空的。這是如果同時來了五輛車,看門人允許其中三...