首先,exec
家庭系统调用的不执行它自己的形象,而它执行二进制IT负载。按man exec
:
The exec() family of functions replaces the current process image with a new process image.
因此,它会表现特定的可执行映像如何准备安排。
当一个标记为SCHED_BATCH
的进程被标记为进程时,它们将根据它们的nice值进行调度,就像SCHED_OTHER
一样。由于批处理任务不需要用户交互,因此调度程序将该任务视为CPU密集型。按照man sched_setschedparam
报价从SCHED_BATCH: Scheduling batch process
-
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.
因此,如果您更改进程的调度策略,以SCHED_BATCH
,它会被安排只是像几乎所有其它正常过程(SCHED_OTHER,默认的调度策略)。如果您想回退到完全默认行为,则必须将SCHED_RESET_ON_FORK
标志或与调度策略结合使用。如果您指定该标志,则任何新创建的进程都将回退到缺省调度策略,而不是复制父级的行为。
希望这会有所帮助!
基本上什么,我问的是有些不同,我首先设置一个新的'forked'子进程的调度是'SCHED_IDLE'使用'sched_setscheduler',现在这个派生的子进程创建使用'execvp'系统的新工艺因此,这个新创建的进程也将具有与创建该进程的子进程相同的调度程序SCHED_IDLE,或者它可能会有所不同? – Jarvis
再次,'execvp'不会创建新的进程,它会替换调用进程的映像。 fork()和exec()之间有区别。 'fork()'重复调用进程(这意味着在内存中创建新空间,execvp不会)。 –
是的,所以如果它取代了它的形象,那么前一个过程的调度器对于新过程将是相同的,对吧? – Jarvis