linux c 定时器程序,Linux C 定时器 篇(一)

最近写程序经用到定时器,每次都是从网上抄一段代码临时替用,每次都了解个皮毛,今天特意收集了一个定时器的应用知识,在这里做一下总结,已备不时之需,

一。采用信号  SIGALRM 方式定时。

常用的四个发出信号的系统函数是kill,raise, alarm和setitimer函数

int kill(pid_t pid,int sig);

int raise(int sig);

unisigned int alarm(unsigned int seconds);

kill系统调用负责向进程发送信号sig.

如果pid是正数,那么向信号sig被发送到进程pid.

如果pid等于0,那么信号sig被发送到所以和pid进程在同一个进程组的进程

如果pid等于-1,那么信号发给所有的进程表中的进程,除了最大的哪个进程号.

如果pid由于-1,和0一样,只是发送进程组是-pid.

我们用最多的是第一个情况.还记得我们在守护进程那一节的例子吗?我们那个时候用这个函数杀死了父进程守护进程的创建

raise系统调用向自己发送一个sig信号.我们可以用上面那个函数来实现这个功能的.

alarm函数和时间有点关系了,这个函数可以在seconds秒后向自己发送一个SIGALRM信号.

alarm函数应用:

要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。需要注意的是,经过指定的秒数后,信号由内核产生,由于进程调度的延迟,所以进程得到控制从而能够处理该信号还需要一些时间。

#include

#include

#include

#include

static int count;

int sec = 1;

void DealWithSigalrm(int sig)

{

count++;

printf("time out sig :%d count:%d\n",sig,count);

alarm(sec);

}

int main()

{

if(signal(SIGALRM,DealWithSigalrm) == SIG_ERR)

{

puts("error regist sigalrm");

return -1;

}

alarm(sec);

while(1)

{

sleep(100);

}

return 0;

}

kill()函数应用:

#include

#include

#include

#include

#include

static int count;

int sec = 1;

void DealWithSigalrm(int sig)

{

count++;

printf("time out sig :%d count:%d\n",sig,count);

}

int main()

{

if(signal(SIGALRM,DealWithSigalrm) == SIG_ERR)

{

puts("error regist sigalrm");

return -1;

}

while(1)

{

kill(getpid(),SIGALRM);

sleep(sec);

}

return 0;

}

raise()应用:

#include #include #include #include #include static int count;  int sec = 1; void DealWithSigalrm(int sig) { count++; printf("time out sig :%d       count:%d\n",sig,count); } int main() { if(signal(SIGALRM,DealWithSigalrm) == SIG_ERR) { puts("error regist sigalrm"); return -1; }    while(1) { //kill(getpid(),SIGALRM); raise(SIGALRM); sleep(sec); }    return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值