【发布时间】:2015-06-23 08:45:23
【问题描述】:
下面的代码让我很困惑
static jmp_buf env_alrm;
static void sig_alrm1(int signo){
longjmp(env_alrm,1);
}
unsigned int sleep2(unsigned int nsecs){
if(signal(SIGALRM ,sig_alrm) == SIG_ERR)
return(nsecs);
if(setjmp(env_alrm) == 0){
alarm(nsecs);
pause();
}
return(alarm(0));
}
static void sig_int(int);
int main(void){
unsigned int unslept;
if(signal(SIGINT,sig_int) == SIG_ERR)
err_sys("signal (sigint) error");
unslept = sleep2(5);
printf("sleep2 return ed :%u\n" ,unslept);
exit(0);
}
static void sig_int(int signo){
int i,j;
volatile int k;
printf("\nsig_int staring\n");
for(i = 0;i<30000;i++)
for(j = 0;j<4000;j++)
k += i *j;
printf("sig_int finished");
}
在睡眠功能工作时,如果我按 ctrl+c。 到底发生了什么?它会忽略 SIGALRM 并运行 sig_int 然后退出吗?
【问题讨论】: