Linux 中 alarm 函数详解

news2025/1/23 13:15:45

目录

    • 简介
    • 函数原型
    • 函数参数
    • 返回值
    • 使用示例
      • 设置 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); // 返回 0

    while (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); // 返回 0

    sleep(2);       // 延时 2 秒
    res = alarm(2); // 修改定时时间为 2 秒,返回值为上次定时剩余时间,即为 1
    printf("alarm 返回值: %d \n", res);

    sleep(1);       // 延时 1 秒
    res = alarm(0); // 取消定时,返回值为上次定时剩余时间,即为 1
    printf("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.coloradmin.cn/o/1672440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好&#xff0c;我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY&#xff0c;为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话&#xff0c;欢迎分享转发&#xff01; 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可&#xff0c;新用户可免费…

五、Linux二进制安装MariaDB 六、MariaDB主从复制

目录 五、Linux二进制安装MariaDB1 卸载mariadb1.1 卸载相关的服务(mysql和mariadb都查询一下)1.2 查找MySQL和mariadb相关的文件目录 2 安装mariadb2.1 mariadb下载地址2.2 将安装包放入到服务器中并解压 (我放到opt下)2.3 将解压后的目录移动到安装目录下2.4 创建数据目录(根…

【iOS】架构模式

文章目录 前言一、MVC二、MVP三、MVVM 前言 之前写项目一直用的是MVC架构&#xff0c;现在来学一下MVP与MVVM两种架构&#xff0c;当然还有VIPER架构&#xff0c;如果有时间后面会单独学习 一、MVC MVC架构先前已经详细讲述&#xff0c;这里不再赘述&#xff0c;我们主要讲一…

YOLOv9改进策略目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

&#x1f451; YOLOv9有效涨点专栏目录 &#x1f451; 专栏视频介绍&#xff1a;包括专栏介绍、得到的项目文件、模型二次创新、权重文件的使用问题&#xff0c;点击即可跳转。 前言 Hello&#xff0c;各位读者们好 本专栏自开设两个月以来已经更新改进教程50余篇其中包含Re…

持续集成-Git

重要步骤命令 git init (初始化一个仓库) git add [文件名] (添加新的文件) git commit -m [关于本次提交的相关说明] (提交) git status (查看文件状态) git diff (如果文件改变&#xff0c;比较两个文件内容) git add[文件名] || git commit -a -m [关于本次提交的相关说…

Java入门1: 基础语法

Java入门1: 基础语法 MangoGO 芒狗狗 目录 1 基础语法1.1 Hello World1.2 常量1.3 数据类型1.4 String1.5 StringBuilder1.6 运算符1.7 位运算符1.8 逻辑运算符1.9 关系运算符1.10 练习&#xff1a;计算数字和1.11 关键字和语句1.12 流程控制1.13 数组1.14 用户输入操作参考代码…

WCF 双工 回调模式

wcfInterface 项目 》》》wcf服务端提供的服务协议 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; namespace wcfInterface {[ServiceContract(CallbackContract typeo…

【pouchdb-可视化工具 】

最近使用pouchdb&#xff0c;想找个其对应的可视化工具&#xff0c;可以对数据库进行操作。 找了好久才找到&#xff0c;网上有说先同步到couchdb&#xff0c;再用couchdb的可视化工具查看&#xff0c;其实没有那么麻烦&#xff0c;pouchdb的可视化工具其实藏在另外的pouchdb-…

自然语言转SQL(NL2SQL、Text2SQL)

使用 FastAPI 框架和 LangChain 库构建的简单 Web 服务&#xff0c;其目的是将自然语言处理&#xff08;NLP&#xff09;应用于 SQL 查询生成。以下是代码中使用的技术架构和业务流程的详细说明&#xff1a; 技术架构 FastAPI&#xff1a;一个现代、快速&#xff08;高性能&am…

Django开发实战之定制管理后台界面及知识梳理(下)

接上一篇&#xff1a;Django开发实战之定制管理后台界面及知识梳理&#xff08;中&#xff09; 1、前台设置 1、隐藏路由 当你输入一个错误地址时&#xff0c;可以看到这样的报错&#xff1a; 从这样的报错中&#xff0c;我们可以看到&#xff0c;这个报错页面暴漏了路由&a…

Linux学习之禁用防火墙

查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈是有颜色的就是开启状态 黑色的就是关闭状态 关闭防火墙 systemctl stop firewalld.service 输入密码认证 再次查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈变成黑色说明关闭…

【基础技能】Windows常用快捷键

最近做知识管理&#xff0c;梳理了下个人技能&#xff0c;存在好多基础技能都是一知半解&#xff0c;用的时候都是现搜现查&#xff0c;没有形成一个完整的知识体系&#xff0c;导致一些基础不牢靠&#xff0c;需要再次筑基&#xff01; 于是就翻阅了微软的官网&#xff0c;撸…

1Panel应用推荐:Uptime Kuma

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决&#xff1f; 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务&#xff0c;以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化&#xff0c;订单服务都无需做任何更改&#xff0c…

git版本控制器详解(3)本地和远端同步

为什么要使用gitee&#xff1f; gitee是基于git所搭建的网站&#xff0c;会给我们提供一个稳定的服务器保存我们的版本信息。因为github是国外网站&#xff0c;国内访问速度不够稳定&#xff0c;所以我们选择使用gitee。 前边我们讲解了如何在本地进行操作&#xff0c; 接下来进…

golang创建式设计模式------单例模式

目录导航 1.单例模式1)什么是单例模式 2)使用场景3)实现方式1.懒汉式单例模式2.饿汉式3.双重检查式4.sysc.Once式 4)实践案例5)优缺点分析 1.单例模式 1)什么是单例模式 单例模式(Singleton Pattern)是一种常用的设计模式。单例模式的类提供了一种访问其唯一对象的方法&#…

牛客小白月赛90VP

1&#xff0c;签到&#xff1a;https://ac.nowcoder.com/acm/contest/78306/A AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,a[100010]; long long sum; int main() {cin>>n>>m;for(int i1;i<n;i) cin>>a[i];for(int …

[Algorithm][回溯][全排列][子集] + 回溯原理 详细讲解

目录 0.原理讲解1.全排列1.题目链接2.算法原理详解3.代码实现 2.子集1.题目链接2.算法原理详解3.代码实现 0.原理讲解 回溯算法通常⽤于解决组合问题、排列问题和搜索问题等回溯算法的基本思想&#xff1a; 从⼀个初始状态开始&#xff0c;按照⼀定的规则向前搜索&#xff0c;…

针对关键 PuTTY 私钥恢复漏洞的 PoC 发布

安全研究人员针对广泛使用的 PuTTY SSH 和 Telnet 客户端中的一个关键漏洞发布了概念验证 (PoC) 漏洞利用。 该漏洞CVE-2024-31497允许攻击者恢复 PuTTY 版本 0.68 至 0.80 中使用 NIST P-521 椭圆曲线生成的私钥。 该漏洞源于 PuTTY在使用 P-521 曲线时偏向生成ECDSA随机数。…

[FSCTF 2023]ez_php1

一共有三小关 第一关&#xff1a;md5加密 第二关&#xff1a;反序列化 重点 单个字符串序列化 unserialize($str) "$KEY" <?php $KEY"YES I love";echo serialize($KEY); s:10:"YES I love"; 第三关&#xff1a; 反序列化 把a的地址赋给…