2016-09-24 43 views
1

假設我有一個子進程,其調度策略使用C庫的函數sched_setscheduler設置爲SCHED_BATCH,現在這個子進程使用這個子進程創建一個外部進程execvp系統調用。在分叉後執行系統調用中的調度策略

創建的新進程的調度程序是否與前一個子進程的調度程序相同,即是否通過execvp系統調用繼承了調度策略?我已閱讀手冊頁,其中指出FIFORR政策是繼承的,但對於正常的政策,像SCHED_BATCHSCHED_IDLESCHED_OTHER

有它支持所有的調度策略的繼承任何exec家庭的功能?

回答

0

首先,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標誌或與調度策略結合使用。如果您指定該標誌,則任何新創建的進程都將回退到缺省調度策略,而不是複製父級的行爲。

希望這會有所幫助!

+0

基本上什麼,我問的是有些不同,我首先設置一個新的'forked'子進程的調度是'SCHED_IDLE'使用'sched_setscheduler',現在這個派生的子進程創建使用'execvp'系統的新工藝因此,這個新創建的進程也將具有與創建該進程的子進程相同的調度程序SCHED_IDLE,或者它可能會有所不同? – Jarvis

+0

再次,'execvp'不會創建新的進程,它會替換調用進程的映像。 fork()和exec()之間有區別。 'fork()'重複調用進程(這意味着在內存中創建新空間,execvp不會)。 –

+0

是的,所以如果它取代了它的形象,那麼前一個過程的調度器對於新過程將是相同的,對吧? – Jarvis