• 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  
  • 相关阅读:
    P2149 [SDOI2009]Elaxia的路线
    P1346 电车
    P3174 [HAOI2009]毛毛虫
    P3047 [USACO12FEB]附近的牛Nearby Cows
    P4053 [JSOI2007]建筑抢修
    P2607 [ZJOI2008]骑士
    [HNOI2006]马步距离
    [POI2014]Hotel
    [BZOJ3856]Monster
    [BZOJ2819]Nim
  • 原文地址:https://www.cnblogs.com/no7dw/p/2049502.html
Copyright © 2020-2023  润新知