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  
posted @ 2011-05-18 01:14  邓维  阅读(1137)  评论(0编辑  收藏  举报