假设我有一个子进程,我的调度策略设置为$(this).closest('.cc-selector').filter('.hide_some_features').prev('.feature_suffix').addClass('test-class');
,使用C库的函数SCHED_BATCH
,现在,这个子进程创建了一个外部进程使用sched_setscheduler
系统调用。
创建新进程的Scheduler是否与前一个子进程的Scheduler相同,即通过execvp
系统调用继承的调度策略?我已经阅读了手册页,其中说明了execvp
和FIFO
政策的继承,但正常的政策如RR
,SCHED_BATCH
和SCHED_IDLE
?
是否有支持继承所有调度策略的SCHED_OTHER
系列函数?
答案 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运算。如果指定该标志,则任何新创建的进程都将回退到默认调度策略而不是复制父进程。
希望这有帮助!