在测试 “信号” 相关代码时发现 进程在sleep() 中能被 信号唤醒。 代码如下:
-
#include <signal.h>
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
static void sig_int(int signo)
-
{
-
printf("caught SIGINT\n");
-
if (signal(SIGINT, sig_int) == SIG_ERR) //重新注册信号
-
perror("can't reset SIGINT");
-
-
}
-
-
int main(void)
-
{
-
-
if (signal(SIGINT, sig_int) == SIG_ERR) // 注册信号
-
perror("can't catch SIGINT");
-
-
sleep(5);
-
exit(0);
-
}
运行程序时,一旦按下 "Ctrl + C " 给程序发送 SIGINT信号就打印出
caught SIGINT,然后程序立马退出。并没有继续 sleep() 。从这里可以看出产生的信号把 程序从sleep()中唤醒了。
所以在使用sleep()作为计时使用时一定要注意这一点。
阅读(1599) | 评论(0) | 转发(0) |