Linux 中 alarm 函数详解

目录

    • 简介
    • 函数原型
    • 函数参数
    • 返回值
    • 使用示例
      • 设置 3 秒闹钟
      • 修改闹钟与取消闹钟
      • 设置 1 秒周期定时器
    • 更多内容

简介

alarm 函数的功能是设置一个闹钟(定时器),当闹钟时间到时,内核会向当前进程发送一个 SIGALRM 信号。

打开 Linux 终端,输入 man alarm 命令查看 alarm 的详细信息如下:

函数原型

#include <unistd.h>unsigned int alarm(unsigned int seconds);

函数参数

  • seconds 为闹钟定时时间,单位为秒。
  • 当 seconds 为 0 时,为取消之前设置的闹钟。

返回值

  • 若该进程之前设置了闹钟,且还没有超时,则返回之前闹钟的剩余时间,同时之前设置的闹钟被替换。
  • 若该进程之前未设置闹钟,或设置的闹钟已超时,返回 0。

使用示例

每个进程只能设置一个 alarm 闹钟。当 SIGALRM 信号到来时,系统的默认操作是终止进程,但是当进程中设置了 alarm,大多数都会捕获此信号。

注意:示例程序中使用 sleep 旨在实现效果,在项目中混合使用 sleep 和 alarm 函数并不是一个好主意,可能会引发问题。

设置 3 秒闹钟

  • 程序示例
// alarm.c
#include <stdio.h>
#include <unistd.h>
#include <signal.h>void sig_handler(int signal)
{printf("receive the signal %d.\n", signal);
}int main(void)
{signal(SIGALRM, sig_handler); // 设置信号,绑定信号处理函数int res = alarm(3);               // 设置定时时间 3 秒printf("alarm 返回值: %d \n", res); // 返回 0while (1){sleep(1);}return 0;
}
  • 执行效果

修改闹钟与取消闹钟

  • 程序示例
#include <stdio.h>
#include <unistd.h>
#include <signal.h>void sig_handler(int signal)
{printf("receive the signal %d.\n", signal);
}int main(void)
{signal(SIGALRM, sig_handler); // 设置信号,绑定信号处理函数int res = alarm(3);               // 设置定时时间 3 秒printf("alarm 返回值: %d \n", res); // 返回 0sleep(2);       // 延时 2 秒res = alarm(2); // 修改定时时间为 2 秒,返回值为上次定时剩余时间,即为 1printf("alarm 返回值: %d \n", res);sleep(1);       // 延时 1 秒res = alarm(0); // 取消定时,返回值为上次定时剩余时间,即为 1printf("alarm 返回值: %d \n", res);while (1){sleep(1);}return 0;
}
  • 执行效果

设置 1 秒周期定时器

alarm 并不能重复触发,要实现周期定时器的效果,可以在 SIGALRM 信号处理函数中再次设置闹钟。

  • 程序示例
#include <stdio.h>
#include <unistd.h>
#include <signal.h>void sig_handler(int signal)
{printf("signal interrupt! \n");alarm(1);
}int main(void)
{signal(SIGALRM, sig_handler); // 设置信号,绑定信号处理函数alarm(1); // 设置定时时间 3 秒while (1){sleep(1);}return 0;
}
  • 执行效果

更多内容

  • CSDN博客:@Hello阿尔法
  • 哔哩哔哩:@Hello阿尔法
  • 知乎:@Hello阿尔法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696266.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程:服务器模型-并发服务器-多线程实现并发服务器

思想&#xff1a; 主进程专门用于连接多个客户端的请求&#xff0c;若有一条客户端连接进来&#xff0c;主进程就创建一个子进程&#xff0c;用该子进程来处理客户端的业务数据。 tcp_server.c #include <sys/types.h> #include <sys/socket.h> #include <std…

2024期从、证从、基从、银从备考资料及互助交流群

快进&#xff0c;2024年 金融考证备考资料及互助交流备考群&#xff0c;考啥进啥 5.12 &#xff08;基从&#xff09;基金从业资格考试 5.18&#xff08;期从&#xff09;期货从业资格考试 6.1 &#xff08;证从&#xff09;证券从业资格考试 6.1&#xff5e;6.2&#xff08;银…

交通地理信息系统实习教程(二)

这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置&#xff1a;【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置&#xff1a;【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…

福建医疗器械展/2024厦门国际医疗器械展览会重磅来袭

2024中国&#xff08;厦门&#xff09;国际医疗器械展览会 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 地 点&#xff1a;厦门国际会展中心 Xiamen International Conference & Exhibition Center ​ ◆组织机构 主办单位&#xff1a; 中国技术市场协会医…

Java——多线程

一.多线程 1.什么是多线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程的实际运作单位 简单理解多线程就是应用软件中相互独立&#xff0c;可以同时运行的功能(也可以理解为人体内相互独立&#xff0c;但可以同时运行的器官⌓‿⌓) 我们…

代理IP可靠吗?哪里可以找到可靠的代理?

需要代理来访问受限制的网站或改善您的在线隐私&#xff1f;别再犹豫了&#xff01;在这篇博文中&#xff0c;我们将探讨您可以使用的选项&#xff0c;并提供有关在哪里获取代理的指导。 首先&#xff0c;让我们了解什么是代理及其工作原理。代理充当您的设备和互联网之间的中介…

ATFX:美国通胀率平台期,或助力黄金延续涨势

ATFX金属&#xff1a;5月9日19:00至5月10日19:00&#xff0c;COMEX黄金的小时级别出现一波持续24小时的上涨走势&#xff0c;最高触及2385.3美元&#xff0c;累计涨幅2.78%&#xff0c;成为上周最佳的短线交易时机。R阻力线形成后&#xff0c;COMEX黄金进入下降通道&#xff0c…

MySQL从入门到高级 --- 6.函数

文章目录 第六章&#xff1a;6.函数6.1 聚合函数6.2 数学函数6.3 字符串函数6.4 日期函数6.4.1 日期格式 6.5 控制流函数6.5.1 if逻辑判断语句6.5.2 case when语句 6.6 窗口函数6.6.1 序号函数6.6.2 开窗聚合函数6.6.3 分布函数6.6.4 前后函数6.6.5 头尾函数6.6.6 其他函数6.7 …

Golang面向对象编程(二)

文章目录 封装基本介绍封装的实现工厂函数 继承基本介绍继承的实现字段和方法访问细节多继承 封装 基本介绍 基本介绍 封装&#xff08;Encapsulation&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一种重要概念&#xff0c;封装通过将数据和相关的方法组合在一起…

哪个牌子防水运动蓝牙耳机比较好?别错过四款高分防水耳机锦集!

在现代生活中&#xff0c;运动与音乐的交织早已超越单纯的休闲娱乐范畴&#xff0c;转而成为人们追求身心健康、提升运动表现的重要元素。尤其对于那些热爱户外运动、热衷于水上活动&#xff0c;或是追求无拘无束训练体验的健身爱好者而言&#xff0c;一款性能优越、防水可靠的…

【代码随想录】【动态规划】背包问题 - 完全背包

完全背包 模板&#xff1a;完全背包问题 问题描述 完全背包问题与01背包问题唯一的区别在于&#xff1a; 在01背包中&#xff1a;每个物品只有一个&#xff0c;要么放入背包&#xff0c;要么不放入背包在完全背包中&#xff1a;每个物品有无限多个&#xff0c;可以不放入背…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref&#xff1a;6.8. 长短期记忆&#xff08;LSTM&#xff09; — 《动手学深度学习》 文档 (gluon.ai)