//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 !
.......................................................................
.......................................................................
.......................................................................