在fork之后的exec系统调用中调度策略

时间:2016-09-24 06:33:21

标签: c linux scheduling scheduler execvp

假设我有一个子进程,我的调度策略设置为$(this).closest('.cc-selector').filter('.hide_some_features').prev('.feature_suffix').addClass('test-class'); ,使用C库的函数SCHED_BATCH,现在,这个子进程创建了一个外部进程使用sched_setscheduler系统调用。

创建新进程的Scheduler是否与前一个子进程的Scheduler相同,即通过execvp系统调用继承的调度策略?我已经阅读了手册页,其中说明了execvpFIFO政策的继承,但正常的政策如RRSCHED_BATCHSCHED_IDLE

是否有支持继承所有调度策略的SCHED_OTHER系列函数?

1 个答案:

答案 0 :(得分:0)

首先,exec系列调用不会执行它自己的映像,而是执行它加载的二进制文件。根据{{​​1}}:

man exec

因此,它会表现出如何准备安排特定的可执行映像。

如果某个流程标记为The exec() family of functions replaces the current process image with a new process image.,则会根据SCHED_BATCH的好值来安排这些流程。因为批处理任务不需要用户交互,因此调度程序将任务视为CPU密集型。根据{{​​1}}引用的SCHED_OTHER -

man sched_setschedparam

因此,如果您将进程的调度策略更改为SCHED_BATCH: Scheduling batch process,则可以像几乎任何其他正常进程(SCHED_OTHER,默认调度策略)一样调度它。如果要回退到完全默认行为,则必须使用This policy is similar to SCHED_OTHER in that it schedules the process according to its dynamic priority (based on the nice value).The difference is that this policy will cause the scheduler to always assume that the process is CPU-intensive. Consequently, the scheduler will apply a small scheduling penalty with respect to wakeup behaviour, so that this process is mildly disfavored in scheduling decisions.标志与调度策略进行OR运算。如果指定该标志,则任何新创建的进程都将回退到默认调度策略而不是复制父进程。

希望这有帮助!