• Linux系统编程 102 alarm函数


    其他几个发信号的函数

    raise  abort;

    重点要掌握alarm信号和settimer函数

    alarm函数

    用于设置定时器;在指定seconds后,内核会给当前进程发送14)SIGALRM信号,进程收到该信号,默认动作是终止进程。

    每个进程有且只有唯一一个定时器。(重点) 

    返回值:上一次闹钟剩余的时间

    常用:alarm(0)用于取消定时器(重置闹钟),返回久闹钟剩余的时间。

    alarm(5)->3s  -> alarm(4)  ps:返回2 -> 5s ->alarm(5) ps:这个时候返回0 ->alarm(0) ps:返回5.

    注意:定时和进程状态无关(自然定时法)! 就绪、运行、挂起(阻塞、暂停)、终止、僵尸...无论进程处于何种状态,alarm都计时。

    练习:编写程序,测试1s中,能数多少个函数。

    1. #include
    2. #include
    3. int main(void)
    4. {
    5. int i;
    6. alarm(1);
    7. for (i =0; ;i++)
    8. {
    9. printf("%d\n",i);
    10. }
    11. return 0;
    12. }

    执行结果:

    使用time命令查看程序执行的时间。 程序运行的瓶颈在于IO,优化程序,首选优化IO.

    实际执行的时间 = 系统时间 + 用户时间 + 等待时间

     real:程序实际执行的时间

    user: 表示程序运行在用户空间的消耗的时间。

    sys: 表示程序运行在内核空间的消耗的时间。

    可以发现 user + sys 不等于 1s;只有0.3s左右,其他的0.7s是等待时间。

    程序运行的瓶颈在于IO,优化程序,首选IO.

    1. ubuntu@ubuntu:~/code/test$ ./a.out > out
    2. Alarm clock
    3. ubuntu@ubuntu:~/code/test$ vim out

    执行结果:

     

    alarm 函数:

     定时发送SIGALRM给当前的进程。

    1. SYNOPSIS
    2.        #include
    3.        unsigned int alarm(unsigned int seconds);

    seconds: 定时秒数;

    返回值:上一次定时剩余时间;


     

  • 相关阅读:
    5. kafka单机版本
    log4j升级到log4j2 spring
    【STM32G431RBTx】备战蓝桥杯嵌入式汇总
    压缩pdf文件大小,如何压缩pdf
    WordPress简单好看的线报主题模板源码
    WPF 控件专题 GroupBox控件详解
    使用 PostgreSQL 16.1 + Citus 12.1 作为多个微服务的分布式 Sharding 存储后端
    raw照片智能处理软件 DxO PureRAW mac中文版高级功能
    Docker安装MongoDB和Redis
    记-数据库事务隔离级别
  • 原文地址:https://blog.csdn.net/sinat_36070482/article/details/127117227