setitimer(ITIMER_REAL,...) 原因 SIGALRM 在计时器到期时被发送到调用进程。 SIGALRM 是一个通常致命的信号,其默认配置是杀死进程。
setitimer(ITIMER_REAL,...)
SIGALRM
如果你想阻止你的进程被这个信号杀死,你需要以某种方式处理它。
示例(根据您的代码每隔100ms从处理程序打印EXPIRED):
#include <sys/time.h> #include <stdio.h> #include <stdint.h> #include <signal.h> #include <unistd.h> void handler(int Sig) { (void)Sig; char msg[]="EXPIRED\n"; ssize_t nwr = write(1,msg,sizeof(msg)-1); (void)nwr; } int main(void) { struct itimerval timer1; struct sigaction sa; sa.sa_handler = handler; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIGALRM,&sa,0); timer1.it_interval.tv_sec = 0; timer1.it_interval.tv_usec = 100000; timer1.it_value.tv_sec = 0; timer1.it_value.tv_usec = 100000 ; setitimer(ITIMER_REAL, &timer1, NULL); printf( "init interval counter: %ld.%ld\n", timer1.it_interval.tv_sec, timer1.it_interval.tv_usec); printf( "init value counter: %ld.%ld\n\n", timer1.it_value.tv_sec, timer1.it_value.tv_usec ); while(1) pause(); return 0; }