Linux调度程序是否更喜欢在fork()之后运行子进程?

Far*_*eer 9 linux fork scheduling

Linux调度程序是否更喜欢fork()在父进程之后运行子进程?

通常,forked进程会执行exec某种类型,所以最好让子进程在父进程之前运行(以防止写入时复制).

我假设孩子exec将在创建之后执行第一个操作.

我的假设(调度程序更喜欢子进程)是正确的.如果没有,为什么?如果是,是否有更多理由让孩子先行?

nem*_*emo 6

引用Linux编程接口(第525页)获得一般答案:

在a之后fork(),不确定哪个进程 - 父进程或子进程 - 接下来可以访问CPU.(在多处理器系统上,它们可以同时访问CPU.)

本书继续讨论内核版本的差异,并提到了CFS/Linux 2.6.32:

[...]自Linux 2.6.32以来,它再一次成为父级,默认情况下,它首先运行fork().可以通过为Linux特定/proc/sys/kernel/sched_child_runs_first文件指定非零值来更改此默认值.

尽管对此功能的未来存在一些顾虑,但CFS仍然存在此行为.看看CFS实现,似乎在孩子之前安排了父母.

你想要的方法是设置/proc/sys/kernel/sched_child_runs_first一个非零值.

编辑: 此答案分析默认行为并将其与之比较sched_child_runs_first.