Linux 信号 alarm函数 setitimer函数

/*
    #include <unistd.h>
    unsigned int alarm(unsigned int seconds);
    功能:设置定时器。函数调用,开始倒计时,0的时候给当前的进程发送SIGALARM信号
    参数:倒计时的时长。。单位:秒  如果参数为0,无效
    返回值:倒计时剩余的时长
            -之前没有定时器,返回0
            -之前有定时器,返回之前的定时器剩余的时间

    SIGALARM:默认终止当前的进程,每一个进程有且仅有唯一的定时器

    函数不阻塞
*/
#include<stdio.h>
#include<unistd.h>
int main() {
    int second = alarm(5);
    printf("seconds = %d\n", second);
    sleep(2);
    second = alarm(2);
    printf("seconds = %d\n", second);

    while(1){

    }
    return 0;
}

后面新设的定时器会取代老的定时器

定时与进程的状态无关,无论进程是阻塞,挂起,就绪,运行定时器都是自己玩自己的

setitimer函数

/*
    #include <sys/time.h>
    int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
    功能:设置定时器(闹钟)。可以替代alarm函数。精度微秒,可以实现周期性的定时。
    参数:
        -which:定时器以什么方式计时
            -ITIMER_REAL:真实时间,时间到达,发送SIGALRM  常用
            -ITIMER_VIRTUAL:用户时间,时间到达,发送SIGVTALRM
            -ITIMER_PROF:一该进程在用户态和内核态下所消耗的时间来计算,时间到达,发送SIGPROF信号
        -new_value:设置定时器的属性
            struct itimerval {
                struct timeval it_interval;   每个阶段的倒计时时长
                struct timeval it_value;      延迟多长时间执行定时器
            };

            struct timeval {
                time_t      tv_sec;        秒数
                suseconds_t tv_usec;       微秒
            };
        -old_value:记录上次定时的时间参数
    返回值:成功0  失败-1
*/
#include <sys/time.h>
#include<stdio.h>
#include<unistd.h>

int main() {

    struct itimerval new_value;
    new_value.it_interval.tv_sec = 2;
    new_value.it_interval.tv_usec = 0;
    new_value.it_value.tv_sec = 3;
    new_value.it_value.tv_usec = 0;

    int ret = setitimer(ITIMER_REAL, &new_value, NULL);
    printf("开始\n");
    if(ret == -1) {
        perror("ret");
        return 0;
    }
    while(1) {
        printf("1\n");
        sleep(1);
    }
    return 0;
}

延迟三秒开始执行就会立马发送信号,然后每隔两秒发送一次

相关推荐
Kalika0-01 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
韩楚风2 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学2 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO2 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu73 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我3 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、3 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程3 小时前
Linux中环境变量
linux
我是哈哈hh3 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝