Linux的 Signal 事件用法

# kill -l

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL

 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2

13) SIGPIPE     14) SIGALRM     15) SIGTERM     17) SIGCHLD

18) SIGCONT     19) SIGSTOP     20) SIGTSTP     21) SIGTTIN

22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ

26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO

30) SIGPWR      31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1

36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4  39) SIGRTMIN+5

40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8  43) SIGRTMIN+9

44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13

52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9

56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6  59) SIGRTMAX-5

60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2  63) SIGRTMAX-1

64) SIGRTMAX

 

View Code
    // start  
   #include  < signal.h >   
   #include 
< sys / time.h >   
   #include 
< stdio.h >   
   #include 
< stdlib.h >   
   
static   void  sighandler( int  sigty);  
   
bool  goon = true ;  
   
int  tot,last;  
   
int  main(){  
   
struct  itimerval v;  
   
if  (signal(SIGUSR1,sighandler) == SIG_ERR){  
   printf(
" error on reg " );  
   exit(
1 );  
   }  
   
if  (signal(SIGALRM,sighandler) == SIG_ERR){  
   printf(
" error on reg " );  
   exit(
2 );  
   }  
   v.it_value.tv_sec
= 3 // 定时3秒  
   v.it_value.tv_usec = 0 ;  
   v.it_interval.tv_sec
= 0 ; // 只做一次  
   v.it_interval.tv_usec = 0 ;  
   setitimer(ITIMER_REAL,
& v,NULL);  // 定时器 
   printf( " timer has be seted\n " );  
   tot
= 0 ;  
   last
= v.it_value.tv_sec;  
   goon
= true ;  
   
while  (goon){  
   getitimer(ITIMER_REAL,
& v);  
   
int  now  =  v.it_value.tv_sec;  
   
// printf("now: %d\n",now);  
    if  (now == last - 1 ){  
   raise(SIGUSR1);  
   tot
++ ;  
   }  
   last
= now;  
   }  
    
   
return   0 ;  
   }  
   
static   void  sighandler( int  sigty){  
   
if  (sigty == SIGUSR1){  
   
struct  itimerval v;  
   getitimer(ITIMER_REAL,
& v);  
   printf(
" real time: %ld sec %ld\n " ,v.it_value.tv_sec ,v.it_value.tv_usec  );  
   }
else   if  (sigty == SIGALRM){  
   printf(
" timer stop\n " );  
   goon
= false ;  
   }  
   }  
   
// end  

你可能感兴趣的:(Signal)