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