SIGALRM

POSIX兼容的平台上,SIGALRM是在定時器終止時傳送給進程信號

基本介紹

  • 中文名:SIGALRM
  • 外文名:SIGALRM
  • 學科:計算機科學
  • 描述:定時器信號
簡介,語源,使用,linux中的SIGALRM信號和SIGCHID信號,舉例,

簡介

POSIX兼容的平台上,SIGALRM是在定時器終止時傳送給進程信號
它們的符號常量頭檔案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();}}

相關詞條

熱門詞條

聯絡我們