- 论坛徽章:
- 0
|
初学signal,编写了如下测试代码:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
int num = 0;
void func(int a){
printf("in func a=%d\n",a);
printf("num is %d\n", num);
if(num >= 10)exit(0);
num++;
}
int main(){
while(1)
{
signal(SIGINT, func);
sleep(100);
printf("sleep\n");
}
return 0;
}
发现每次触发信号会直接跳出sleep函数,而如果自己写一个类似sleep的函数:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
int num = 0;
void func(int a){
printf("in func a=%d\n",a);
printf("num is %d\n", num);
if(num >= 10)exit(0);
num++;
}
void my_sleep(){
int i = 0;
printf("alarm\n");
while(i < 1000000000){
i++;
}
}
int main(){
while(1)
{
signal(SIGINT, func);
my_sleep();
printf("sleep\n");
}
return 0;
}
则发现signal执行完毕后回到了my_sleep的循环中而不像sleep那样,请教下到底是为什么?多谢多谢
|
|