cron 守护进程的内部结构是如何工作的?

cron 守护进程的内部结构是如何工作的?

我想知道cron内部是如何运作的。该进程是否在无限 while 循环中不断检查当前时间(从而不断消耗 CPU 周期)?或者某些函数是否会生成中断并通知cron守护程序?

答案1

我曾经读过 vixie-cron 源代码,不得不住院。但是,如果您将来要查找“某个函数生成中断”,则应该研究alarm(2)系统调用。它要求内核SIGALRM在预定时间向您发送信号,然后您可以捕获该信号。同时,您的流程可以做其他事情,或者sleep()像我在医院所做的那样。

答案2

我确信它的工作方式有很多变化dcron(又名 Dillon 的 cron 守护进程)的特点是它一次睡眠时间长达 60 秒,如果需要,它会尝试通过减少睡眠时间来同步,以便在每分钟 00 秒醒来。

它使用sleep()它使进程进入睡眠状态(除非发生信号)而不使用 CPU。当它醒来时,它会检查文件cron.update(通过crontab编辑创建)。如果需要,它会重新创建其运行队列,运行预期的任务,然后再次休眠。

至少有一个 cron 守护进程 ( fcrond) 使用由 crontab 编辑发送到 cron 守护进程的信号,而不是睡眠/检查方法。

我从未见过 crond 运行频率超过每分钟一次,因此它们通常占用的资源很少。

在 Linux 上,如果您查看/proc字节读/写或 iowait 等内容,crond您可能会发现它的使用率相对较高,这是因为它最终会占用它启动的所有子进程,例如在 CentOS 5.x 上:

# grep "^[rw]" /proc/`pgrep crond`/io
rchar: 153463658151
wchar: 91095820045
read_bytes: 44480745472
write_bytes: 2261389312

(在这种情况下,感谢计划的软件包更新以及 ASLR/预链接任务)

也可以看看https://stackoverflow.com/questions/3982957/how-does-cron-internally-schedule-jobs

相关内容