基本介紹
- 中文名:SIGALRM
- 外文名:SIGALRM
- 學科:計算機科學
- 描述:定時器信號
簡介,語源,使用,linux中的SIGALRM信號和SIGCHID信號,舉例,
簡介
它們的符號常量在頭檔案signal.h中定義。
在不同的平台上,信號的編號可能發生變化,因此需要使用符號名稱。
語源
SIG是信號名的通用前綴。
ALRM是alarm的縮寫,即定時器。
使用
電腦程式通常使用SIGALRM作為長時間操作的逾時信號,或提供一種隔一定時間間隔處理某些操作的方式。
SIGALRM通常在調用alarm(3)系統調用的整數秒之後產生。有時它被作為sleep(3)的實現;因此,不能保證可以用alarm(3)在sleep(3)調用進行中喚醒程式。
linux中的SIGALRM信號和SIGCHID信號
在進行阻塞式系統調用時,為避免進程陷入無限期的等待,可以為這些阻塞式系統調用設定定時器。Linux提供了alarm系統調用和SIGALRM信號實現這個功能。
要使用定時器,首先要安裝SIGALRM信號。如果不安裝SIGALRM信號,則進程收到SIGALRM信號後,預設的動作就是終止當前進程。SIGALRM信號安裝成功後,在什麼情況下進程會收到該信號呢?這就要依賴於Linux提供的定時器功能。在Linux系統下,每個進程都有惟一的一個定時器,該定時器提供了以秒為單位的定時功能。在定時器設定的逾時時間到達後,調用alarm的進程將收到SIGALRM信號。alarm系統調用的原型為:
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
參數說明:
1)seconds:要設定的定時時間,以秒為單位。在alarm調用成功後開始計時,超過該時間將觸發SIGALRM信號。
返回值:
返回當前進程以前設定的定時器剩餘秒數。
舉例
編程利用SIGALRM信號實現秒定時器。
#include <stdio.h>#include <signal.h>//全局計數器變數int Cnt=0;//SIGALRM信號處理函式void CbSigAlrm(int signo){//輸出定時提示信息printf(" seconds: %d",++Cnt);printf("\r");//重新啟動定時器,實現1秒定時alarm(1);}void main(){//安裝SIGALRM信號if(signal(SIGALRM,CbSigAlrm)==SIG_ERR){perror("signal");return;}//關閉標準輸出的行快取模式setbuf(stdout,NULL);//啟動定時器alarm(1);//進程進入無限循環,只能手動終止while(1){//暫停,等待信號pause();}}