SIGALRM信号不要轻易用来设置超时,因为会中断sleep,尤其在多线程程序中,验证如下:
#include <stdio.h>
#include <signal.h>
void alarm_handler(int signo)
{
return;
}
int main()
{
signal(SIGALRM, alarm_handler);
alarm(2);
time_t t1 = time(NULL);
sleep(10);
time_t t2 = time(NULL);
printf("waste : %ld(s)\n", t2-t1);
return 0;
}
运行结果:
waste : 2(s)