【发布时间】:2013-06-27 18:58:53
【问题描述】:
我了解到在/proc/sys/kernel/sched_child_runs_first 中设置一个非零值将强制子进程在父进程之前运行。但是,我认为它似乎不起作用。这是我的代码:
#include <stdio.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
pid_t child_pid;
switch(child_pid = fork())
{
case 0:
printf("In Child\n");
exit(0);
case -1:
printf("Could not fork()\n");
default:
printf("In parent\n");
}
return 0;
}
我得到的输出总是:
In parent
In Child
我期待这里有什么问题吗?
PS:我只是在尝试看看它是否有效,所以请不要建议其他同步机制或为什么这是一个坏主意等。
【问题讨论】:
-
@AmanDeepGautam 感谢您的链接。是的,我也读过 Michael Kerrisk 书中的大部分内容。但他建议在上面的文件“保证”中设置孩子将首先运行的值,或者可能是我读错了。
-
但是链接说他们正在从内核版本 2.6 中删除对此的支持,我找不到他们说再次添加支持的更新帖子。所以可能通过这种方式是不可能的,但我不是这件事的权威..:)
-
@AmanDeepGautam 也许,除非有人能确认,否则我需要深入挖掘。还是谢谢。
-
在带有 Raspbian 的 Raspberry Pi Zero 上使用以下命令: $ sudo echo "1" > /proc/sys/kernel/sched_child_runs_first $ ./fork_whos_on_first 10000 > fork.txt $ ./fork_whos_on_first。 count.awk fork.txt 我得到以下数字(相对于 100%,“0”为 100%): child 21 0.21% parent 9979 99.79%
标签: c linux linux-kernel