在linux编程中,有时候会用到定时功能,常见的是用sleep(time)函数来睡眠time秒;但是这个函数是可以被中断的,也就是说当进程在睡眠的过程中,如果被中断,那么当中断结束回来再执行该进程的时候,该进程会从sleep函数的下一条语句执行;这样的话就不会睡眠time秒了;

实例如下:

  1. /*************************************************************************
  2. > File Name: sleep.c
  3. > Author:
  4. > Mail:
  5. > Created Time: 2015年11月20日 星期五 20时38分59秒
  6. ************************************************************************/
  7.  
  8. #include<stdio.h>
  9. #include <stdlib.h>
  10. #include <signal.h>
  11. #include <unistd.h>
  12.  
  13. void sig_handler(int num)
  14. {
  15. printf("\nrecvive the signal is %d\n", num);
  16. }
  17.  
  18. int main()
  19. {
  20. int time = 20;
  21.  
  22. signal(SIGINT, sig_handler);
  23. printf("enter to the sleep.\n");
  24.  
  25. sleep(time);
  26.  
  27. printf("sleep is over, main over.\n");
  28.  
  29. exit(0);
  30. }

从运行结果可以看出,当我按下Ctrl+c发出中断的时候,被该函数捕获,当处理完该信号之后,函数直接执行sleep下面的语句;
备注:sleep(time)返回值是睡眠剩下的时间;

下面的例子是真正的睡眠time时间(不被中断影响):

  1. /*************************************************************************
  2. > File Name: sleep.c
  3. > Author:
  4. > Mail:
  5. > Created Time: 2015年11月20日 星期五 20时38分59秒
  6. ************************************************************************/
  7.  
  8. #include<stdio.h>
  9. #include <stdlib.h>
  10. #include <signal.h>
  11. #include <unistd.h>
  12.  
  13. void sig_handler(int num)
  14. {
  15. printf("\nrecvive the signal is %d\n", num);
  16. }
  17.  
  18. int main()
  19. {
  20. int time = 20;
  21.  
  22. signal(SIGINT, sig_handler);
  23. printf("enter to the sleep.\n");
  24. //sleep(time);
  25. do{
  26. time = sleep(time);
  27. }while(time > 0);
  28.  
  29. printf("sleep is over, main over.\n");
  30.  
  31. exit(0);
  32. }

备注:其中recevie the signal is 2.表示该信号是中断信号;信号的具体值如下图所示:

最后是sleep函数的man手册,命令为:man 3 sleep

linux中sleep详解实例的更多相关文章

  1. 什么是挂载?linux中挂载详解

    目录 一:什么是挂载,linux中挂载详解 一:什么是挂载,linux中挂载详解 1.linux中'一切皆文件',所有文件都放置在以根目录为树根的树形目录结构中.在linux看来,任何硬件设备也都是文 ...

  2. linux 中/proc 详解

    proc 文件系统 在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统.最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告 ...

  3. Linux中挂载详解以及mount命令用法

    转自:https://blog.csdn.net/daydayup654/article/details/78788310 挂载概念 Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录 ...

  4. linux中awk 详解

    一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报表生 ...

  5. 【转载】postgreSQL在linux中安装详解

    .编译环境 Linux: CentOS 5.5 gcc: 4.1.2 1. 安装PostgreSQL 1) 解压postgresql-9.1.7.tar.bz2 #tar jxvf postgresq ...

  6. Linux 中 crontab 详解及示例

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: /sbin/service c ...

  7. Linux中inode详解

    转自:https://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在 ...

  8. linux中nc详解

    |是管道符号,表示左边的输出作为右边的输入. 1.TCP端口扫描 # nc -v -z -w2 127.0.0.1 1-100 Connection to 127.0.0.1 22 port [tcp ...

  9. 红帽Linux故障定位技术详解与实例(4)

    红帽Linux故障定位技术详解与实例(4)   在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行 ...

随机推荐

  1. python自动华 (十七)

    Python自动化 [第十七篇]:jQuery介绍 jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对jav ...

  2. Python 13--数据库

  3. Ubuntu16安装fabric1.4.4环境

    安装流程依照官网地址 https://hyperledger-fabric.readthedocs.io/en/release-1.4/build_network.html 如果需要安装最新的版本,可 ...

  4. C#读取App.config/Web.config

    读取需要添加 System.Configuration 引用, 两种方式添加: 1:.NETFramework程序可以在引用右击添加引用,然后添加System.Configuration 2:引入Nu ...

  5. 【题解】P1638 逛画展-C++

    原题传送门 思路这道题目可以通过尺取法来完成 (我才不管什么必须用队列)什么是尺取法呢?顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后 ...

  6. 安裝開源BBS軟件YAF時碰到的問題

    1.下載 http://yetanotherforum.net/download.aspx 安裝說明 http://www.drreddys.com/quest/readme.htm 其實只要打開根目 ...

  7. STS工具各版本下载网址

    官网网址:https://spring.io/tools3/sts/legacy

  8. Comet OJ - Contest #3 (A 比赛 加强版)二分答案

    考试的时候同届神犇 JZYshurak 出了一个  n=$10^5$ 的数据加强版. 刚开始没什么思路,但是忽然想到这个可以转成二分判定+暴力枚举的模型. 二分 ans, 使得大于等于 ans 的值小 ...

  9. [Luogu] 网络

    https://www.luogu.org/problemnew/show/P3250 树链剖分 + 线段树 + 优先队列 要求未被影响的请求中最大的 所以每次将每条路径在整棵树上的补集的每个节点的优 ...

  10. c语言 数组类型

    数组类型重命名数组类型由元素类型和数组大小共同决定数组指针是一个指针,只想对应类型的数组指针数组是一个数组,其中每个元素都是指针数组指针遵循指针运算法则指针数组拥有c语言数组的各种特性 c通过type ...