Linux系统编程 102 alarm函数

本文介绍了Linux中的alarm函数及其使用,它用于设置定时器并在指定时间后发送SIGALRM信号给进程。即使进程在不同状态,alarm也会继续计时。通过示例程序展示了如何使用alarm,并分析了程序执行时间的组成,强调了IO优化在程序性能提升中的重要性。
摘要由CSDN通过智能技术生成

其他几个发信号的函数

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中,能数多少个函数。

#include<stdio.h>
#include<unistd.h>

int main(void)
{
    int i;
    alarm(1);
    for (i =0; ;i++)
    {
        printf("%d\n",i);
    }
    return 0;  
}

执行结果:

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

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

 real:程序实际执行的时间

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

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

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

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

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

执行结果:

 

alarm 函数:

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

SYNOPSIS
       #include <unistd.h>

       unsigned int alarm(unsigned int seconds);

seconds: 定时秒数;

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值