Linux下信號處理函數sigaction

 

 

//sigprof.c

/*************************************************************      
    FileName : sigprof.c  
    FileFunc : 2秒產生一次信號處理     
    Version  : V0.1      
    Author   : Sunrier      
    Date     : 2012-05-25  
    Descp    : Linux下信號處理      
*************************************************************/
#include <stdio.h>
#include <sys/time.h>
#include <signal.h>
#include <stdlib.h>

void sig_prof(int signo)
{
	printf("Signal is caught ! Signal number is %d !\n",signo);
	//system("./sig");
}

void init_sigaction( void )
{
	struct sigaction act;
	act.sa_handler=sig_prof;
	act.sa_flags=0;
	sigemptyset(&act.sa_mask);//初始化信號集
	sigaction(SIGPROF,&act,NULL);//SIGPROF表示使用setitimer指定的Profiling Interval Timer所產生 
}

void init_time( void )
{
	struct itimerval value;
	value.it_value.tv_sec=2;//秒
	value.it_value.tv_usec=0;//微秒
	value.it_interval=value.it_value;//間隔時間,如果不指定就只實現一次定時,如果it_value和it_interval兩者都清零,則會清除定時器。 
	setitimer(ITIMER_PROF,&value,NULL);//ITIMER_PROF送出SIGPROF信號
}

int main(int argc,char *argv[])
{
	init_sigaction();//初始化設置信號處理
	init_time();//精確定時
	while(1);
	return 0;
	//exit(0);
}


 

 

[Sunrier@localhost Sig]$ gcc -o sig sigprof.c
[Sunrier@localhost Sig]$ ./sig
Signal is caught ! Signal number is 27 !
Signal is caught ! Signal number is 27 !
Signal is caught ! Signal number is 27 !
Signal is caught ! Signal number is 27 !
Signal is caught ! Signal number is 27 !
Signal is caught ! Signal number is 27 !

.......................................................................

.......................................................................

.......................................................................

 

 

 

//sigalrm.c

/*************************************************************      
    FileName : sigalrm.c  
    FileFunc : 2秒產生一次信號處理     
    Version  : V0.1      
    Author   : Sunrier      
    Date     : 2012-05-25  
    Descp    : Linux下信號處理      
*************************************************************/
#include <stdio.h>
#include <sys/time.h>
#include <signal.h>
#include <stdlib.h>

void sig_prof(int signo)
{
	printf("Signal is caught ! Signal number is %d !\n",signo);
	//system("./sig");
}

void init_sigaction( void )
{
	struct sigaction act;
	act.sa_handler=sig_prof;
	act.sa_flags=0;
	sigemptyset(&act.sa_mask);//初始化信號集
	//sigaction(SIGPROF,&act,NULL);//SIGPROF表示使用setitimer指定的Profiling Interval Timer所產生 
	sigaction(SIGALRM,&act,NULL);//用alarm函數設置的timer超時或setitimer函數設置的interval timer超時
}

void init_time( void )
{
	struct itimerval value;
	value.it_value.tv_sec=2;//秒
	value.it_value.tv_usec=0;//微秒
	value.it_interval=value.it_value;//間隔時間,如果不指定就只實現一次定時,如果it_value和it_interval兩者都清零,則會清除定時器。 
	//setitimer(ITIMER_PROF,&value,NULL);//ITIMER_PROF送出SIGPROF信號
	setitimer(ITIMER_REAL,&value,NULL);//ITIMER_REAL送出SIGALRM信號
}

int main(int argc,char *argv[])
{
	init_sigaction();//初始化設置信號處理
	init_time();//精確定時
	while(1);
	return 0;
	//exit(0);
}


 

[Sunrier@localhost Sig]$ gcc -o sig sigalrm.c
[Sunrier@localhost Sig]$ ./sig
Signal is caught ! Signal number is 14 !
Signal is caught ! Signal number is 14 !
Signal is caught ! Signal number is 14 !
Signal is caught ! Signal number is 14 !
Signal is caught ! Signal number is 14 !
Signal is caught ! Signal number is 14 !

.......................................................................

.......................................................................

.......................................................................

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章