Linux 计时器是否会由“启动”;setitimer();要重新启动吗?

Linux 计时器是否会由“启动”;setitimer();要重新启动吗?,linux,linux-kernel,kernel,Linux,Linux Kernel,Kernel,linux内核中的每个都有一个名为“realtimer”的字段,它是一个(高分辨率计时器)。当我们使用设置计时器时,它将进程中的“实际计时器”设置为按给定值过期。当它过期时,将调用名为的函数。以下是: /* *计时器自动重新启动,时间间隔为!=0 */ 枚举hrtimer\u重新启动它\u real\u fn(结构hrtimer*timer) { 结构信号_结构*信号= 容器(计时器、结构信号、实计时器); trace\u itimer\u expire(itimer\u REAL,sig->l

linux内核中的每个都有一个名为“realtimer”的字段,它是一个(高分辨率计时器)。当我们使用设置计时器时,它将进程中的“实际计时器”设置为按给定值过期。当它过期时,将调用名为的函数。以下是:

/*
*计时器自动重新启动,时间间隔为!=0
*/
枚举hrtimer\u重新启动它\u real\u fn(结构hrtimer*timer)
{
结构信号_结构*信号=
容器(计时器、结构信号、实计时器);
trace\u itimer\u expire(itimer\u REAL,sig->leader\u pid,0);
杀戮信息(信号机,发送信号机,信号机->领导信息);
返回HRTIMER_NORESTART;
}

我发现它返回了,这意味着它不能重新启动。但是,如果我们在调用
setitimer
时指定了一个间隔值,这意味着我们希望在每个间隔触发计时器,那么“真正的计时器”应该在哪里是否重新启动?

您的说法是正确的,即
it\u real\u fn
函数不会重新启动实时计时器,但它不是在使用
设置计时器时在计时器到期时调用的函数


setitimer
函数是POSIX定时器的一部分,它们的Linux实现在该文件中,该函数可以返回
HRTIMER\u RESTART
HRTIMER\u NORESTART
,它被定义并分配给
struct HRTIMER
it\u real\fn
(将此函数设置为计时器回调的代码位于中,由POSIX计时器初始化调用)。

但在函数“do_setitimer()”中,它使用“task struct”中的hrtimer。该计时器的回调函数在“fork.c”中设置为“it_real_fn”。在linux 2.6.39.4中,“do_setitimer()”在“itimer.c”中定义。计时器回调被设置为
it\u real\u fn
是预期的行为,因为计时器不是通过
fork
调用继承的。在linux 2.6.39.4中,“do\u setitimer()”是什么意思?该函数仍然在5.0.3中定义。