Linux调度器是否喜欢在fork()之后运行subprocess?

Linux调度器是否喜欢在fork()之后的父进程中运行subprocess?

通常,分叉进程会执行某种types的exec ,所以最好在父进程之前让subprocess运行(防止写入时复制)。

我假设孩子将在创build后执行exec作为第一个操作。

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

Solutions Collecting From Web of "Linux调度器是否喜欢在fork()之后运行subprocess?"

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

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进行比较。

对于小孩在第一时间致电exec的情况,您可以使用vfork而不是fork。 vfork暂停父级,直到子级调用_exitexec *。 但是,一旦调用exec ,如果必须从磁盘加载代码,则该子代将被挂起。 在这种情况下,父母有一个很好的机会继续孩子之前。