我有这个实现来研究fork系统调用API和子进程创建。 在这里,我将从单亲创建5个子进程。我的问题是关于流程的安排。现在父进程和子进程将具有相同的优先级,因此调度程序决定调度它们的唯一方法可能是通过那里PPID。
在第一个fork之后,子进程应该执行,但显然父进程正在执行。这是正确的行为吗? (我是谁来质疑操作系统的行为)或者是我之前关于调度正确的声明..或者操作系统在这里玩一些技巧。
while(i++<5)
{
ret = fork();
if(ret<0)
{
perror("error in fork");
printf("the final value of i is %lu\n", i);
exit(1);
}
if(ret>0)
{
printf("I am in parent process context\n");
break ;
}
if(ret==0)
{
printf("I am in child process context\n");
printf("in child .. ppid is %lu ...and pid is %lu...and number is %d\n",getppid(),getpid(),i);
continue;
}
}
printf("in parent .. ppid is %lu ...and pid is %lu\n",getppid(),getpid());
输出:
我在父进程上下文
父母中的.. ppid是2084 ......而pid是2149
我在子进程上下文
在孩子中.. ppid是2149 ...而pid是2150 ......并且号码是1
我在父进程上下文
父母中的.. ppid是2149 ...而pid是2150
我在子进程上下文
在孩子中.. ppid是2150 ...而pid是2151 ...而且数字是2
我在父进程上下文
父母中的.. ppid是2150 ...而pid是2151
我在子进程上下文
在孩子中... ppid是2151 ...而pid是2152 ...而且数字是3
我在父进程上下文
父母中的.. ppid是2151 ...而pid是2152
我在子进程上下文
在孩子中.. ppid是2152 ...而pid是2153 ...而且数字是4
我在父进程上下文
父母中的.. ppid是2152 ...而pid是2153
我在子进程上下文
在孩子中.. ppid是2153 ...而pid是2154 ...而且数字是5
父母中的.. ppid是2153 ...而pid是2154
答案 0 :(得分:1)
好的,我找到了解决方案。有一个名为“sched_child_runs_first”的属性。 我们可以通过以下方式找到它:
的/ proc / SYS /内核/ sched_child_runs_first。
该值可以是0或1.这决定了调度顺序。