Linux信号(二)

这篇博客深入探讨了Linux中的alarm和ualarm函数,这两个函数用于在指定时间后向进程发送SIGALRM信号。通过示例代码,展示了如何使用它们来实现定时功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

alarm和ualarm

alarm和ualarm函数可以设置一定时间后向程序发送一个SIGALRM信号

alarm(5);//当前时间开始5秒后向发送一个信号
ualarm(500000,200000);//5秒之后发送第一个信号 间隔2秒发送一次
注意:当ualarm的两个参数设置超过1秒时会失效	

demo

#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
#include<sys/types.h>
static int jieffs = 0;
void alarm_on()
{
	printf("the alram clock at %d\n",jieffs);
}

int main(int argc,char**argv)
{
	//给信号绑定槽函数
	signal(SIGALRM,alarm_on);
	
	//从当前时间开始经过3秒后向当前进程发送一个SIGALRM信号
	alarm(3);
	
	while(1)
	{
		if(jieffs==15)
		{
			printf("the time is out\n");
			//getpid()获得自己进程的pid
			//kill 用来给进程发送信号 和 raise(int signum)函数效果一样
			kill(getpid(),SIGINT);
			
		}			
		sleep(1);
		printf("%d\n",jieffs++);
		
	}
}

定时器

//设置定时器
int setitimer(int which,struct itimerval*cur_value);
//获取定时器
int getitimer(int which,const struct itimerval*new_value,struct itimerval*old_value);
which:
ITIMER_REAL 以真实时间消逝递减 最常用
ITIMER_VIRTAL  进程当中时间

struct itimerval
{
	struct timeval it_interval; //第一次触发经过的时间
	 struct timeval it_value; //每次促发的间隔
}

demo


#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>

static int jieffs = 0;
void settimer(struct itimerval *timer)
{
	timer->it_interval.tv_sec = 2;
	timer->it_interval.tv_usec = 0;
	
	timer->it_value.tv_sec = 4;  //设置第一次发送信号的时间
	timer->it_value.tv_usec = 0;
	
	setitimer(ITIMER_REAL,timer,NULL);
}

void signal_handler()
{
		printf("%d\n",jieffs++);
	
}

int main()
{
	struct itimerval timer;
	settimer(&timer);
	signal(SIGALRM,signal_handler);
	while(1)
	{
		sleep(1);
	}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值