gpt4 book ai didi

linux - "setitimer()"启动的定时器会重启吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:43 28 4
gpt4 key购买 nike

每个task_struct在 linux 内核中有一个名为“real timer”的字段,它是一个 struct hrtimer (高分辨率定时器)。当我们使用 setitimer 设置定时器时,它将进程中的“实时计时器”设置为由给定值到期。当它过期时,名为 it_real_fn 的函数叫做。这是 source code in Linux kernel 2.6.39.4 :

/*
* 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的时候赋了一个时间间隔值,也就是说我们要在每个时间间隔触发定时器,那么“真正的定时器”应该从哪里重启呢?

最佳答案

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

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

关于linux - "setitimer()"启动的定时器会重启吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311981/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com