首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由"setitimer()“启动的计时器会重新启动吗?

由"setitimer()“启动的计时器会重新启动吗?
EN

Stack Overflow用户
提问于 2019-03-23 16:29:24
回答 1查看 110关注 0票数 1

linux内核中的每个定时器都有一个名为"real task_struct“的字段,它是一个高精度定时器( struct hrtimer )。当我们使用setitimer设置计时器时,它将进程中的“实际计时器”设置为按给定值过期。当它到期时,调用名为it_real_fn的函数。这是source code in Linux kernel 2.6.39.4

代码语言:javascript
复制
/*
 * The timer is automagically restarted, when interval != 0
 */
enum hrtimer_restart it_real_fn(struct hrtimer *timer)
{
    struct signal_struct *sig =
        container_of(timer, struct signal_struct, real_timer);

    trace_itimer_expire(ITIMER_REAL, sig->leader_pid, 0);
    kill_pid_info(SIGALRM, SEND_SIG_PRIV, sig->leader_pid);

    return HRTIMER_NORESTART;
}

我发现它返回HRTIMER_NORESTART,这意味着它不应该被重启。然而,如果我们在调用setitimer时分配一个间隔值,这意味着我们希望在每个时间间隔触发计时器,那么“真正的计时器”应该在哪里重新启动呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 17:41:45

您说得对,it_real_fn函数不会重新启动实时计时器,但它不是使用setitimer时在计时器到期时调用的函数。

setitimer函数是POSIX计时器的一部分,它们的Linux实现在posix-timers.c中,在这个文件中,可以同时返回HRTIMER_RESTARTHRTIMER_NORESTART的函数posix_timer_fn被定义并分配给struct hrtimerit_real_fn (将该函数设置为计时器回调的代码在common_timer_set中,由POSIX计时器初始化调用)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55311981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档