首先,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