当任务调度程序(例如cron)触发任务(例如cron作业)时,它是通过"轮询"来完成的。每个最小周期(例如第二个)的时钟,或者它是否记录了一个得到"推送的回调"在时机成熟时?
如果是推/回调,底层平台(例如linux)是如何做到的?是否存在"硬件中断"或其他回调机制,用于基于时间的事件?
那么,任务调度程序如何解雇工作?
答案 0 :(得分:6)
从手册页:
cron实用程序然后每分钟唤醒,检查所有存储的crontabs,检查每个命令以查看它是否应该在当前分钟运行。执行命令时,任何 输出邮寄给crontab的所有者(或者crontab中MAILTO环境变量中指定的用户,如果存在的话)。
答案 1 :(得分:2)
可能取决于实施。有些人进行轮询(如上所述),但有些人使用中断方法(检查必须运行下一个任务并设置系统警报)。
答案 2 :(得分:2)
Unix版本7的cron有以下算法:
它的算法很简单:
1)阅读/ usr / etc / crontab 2)确定是否必须在当前日期和时间运行任何命令,如果是,则以超级用户root身份运行它们。 3)睡一分钟 4)从步骤1重复。
但这对系统很重要。并且用于为多用户环境占用大量资源。然后设计了一种新算法:
此cron使用的算法如下:
1)在启动时,在所有帐户持有者的主目录中查找名为.crontab的文件。 2)对于找到的每个crontab文件,确定将来下次必须运行每个命令。 3)将这些命令放在Franta-Maly事件列表中,并附上相应的时间和他们的"五个字段"时间说明符。 4)进入主循环:
现代实施是vixiecron和anacron。这被fcron取代了。我对他们的实施细节没有太多了解。
答案 3 :(得分:1)
守护进程是用于运行后台进程的程序。和克朗 是执行计划命令的守护程序。并获得这些命令 Cron查看/ etc / crontab或/ usr / lib / cron / tabs中的文件 如果存在任何命令文件,那么Cron就会执行它。克龙 实用程序由启动的进程启动,将init替换为 pid 1。
答案 4 :(得分:1)
这个问题的目的不是关于CRON,而是使用cron作为例子的一般任务安排,如果在问题陈述中不清楚,那就很抱歉。
我想知道最低级别的软件如何进行基于时间的调度,如果它必须轮询硬件时钟,或者是否存在基于时间的事件的某种硬件中断。
事实证明实际上存在硬件中断。来自wilipedia:
一个典型的用法是通过划分来定期生成中断 输出晶体振荡器并具有中断处理程序计数 中断以保持时间。这些周期性中断是 操作系统的任务调度程序经常使用它来重新安排优先级 运行过程。一些较旧的计算机生成周期性中断 从电源线频率,因为它是由控制 消除电子钟长期漂移的公用事业。
http://en.wikipedia.org/wiki/Interrupt
所以,尽管cron进行了民意调查(感谢@ joshua-nelson),但有可能并没有,操作系统也没有。