Chinaunix首页 | 论坛 | 博客
  • 博客访问: 393935
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1707
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-27 11:18
个人简介

学无止境……

文章分类

全部博文(85)

分类: LINUX

2014-07-04 16:34:29

在测试 “信号” 相关代码时发现 进程在sleep() 中能被 信号唤醒。 代码如下:

点击(此处)折叠或打开

  1. #include <signal.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. static void sig_int(int signo)
  5. {
  6.     printf("caught SIGINT\n");
  7.     if (signal(SIGINT, sig_int) == SIG_ERR) //重新注册信号
  8.         perror("can't reset SIGINT");

  9. }

  10. int main(void)
  11. {
  12.     
  13.     if (signal(SIGINT, sig_int) == SIG_ERR)  // 注册信号
  14.         perror("can't catch SIGINT");

  15.     sleep(5);        
  16.     exit(0);
  17. }
运行程序时,一旦按下 "Ctrl + C "  给程序发送 SIGINT信号就打印出caught SIGINT,然后程序立马退出。并没有继续 sleep() 。从这里可以看出产生的信号把 程序从sleep()中唤醒了。
所以在使用sleep()作为计时使用时一定要注意这一点。


阅读(1599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~