子进程创建期间的调度



我有这个实现来研究fork系统调用API和子进程的创建。在这里,我从单亲创建5个子进程。我的问题是关于进程的调度。现在父进程和子进程将具有相同的优先级,因此调度程序决定调度它们的唯一方法可能是通过PPID。

在第一个fork之后,子进程应该执行,但显然父进程正在执行。这是正确的行为吗?(我有什么资格质疑操作系统的行为)或者我之前关于调度的陈述是正确的……或者是操作系统在这里玩了一些把戏。

while(i++<5)
{ 
    ret = fork();
    if(ret<0)
    { 
       perror("error in fork"); 
       printf("the final value of i is %lun", i);      
       exit(1); 
    }
    if(ret>0)
    { 
       printf("I am in parent process contextn");
       break ; 
    }
    if(ret==0)
    { 
           printf("I am in child process contextn"); 
           printf("in child .. ppid is %lu ...and pid is %lu...and number is %dn",getppid(),getpid(),i);               
           continue;  

      }
}
    printf("in parent .. ppid is %lu ...and pid is %lun",getppid(),getpid());   
输出:

我在父进程上下文中

in parent ..Ppid是2084年…pid为2149

我在子进程上下文中

in child ..Ppid是2149…pid是2150…number是1

我在父进程上下文中

in parent ..Ppid是2149…pid为2150

我在子进程上下文中

in child ..Ppid是2150…pid是2151…数字是2

我在父进程上下文中

in parent ..Ppid是2150…pid为2151

我在子进程上下文中

in child ..Ppid是2151…pid是2152…数字是3

我在父进程上下文中

in parent ..Ppid是2151…pid为2152

我在子进程上下文中

in child ..Ppid是2152…pid是2153…编号为4

我在父进程上下文中

in parent ..Ppid是2152…pid为2153

我在子进程上下文中

in child ..Ppid是2153…pid是2154…数字是5

in parent ..Ppid是2153…pid为2154

好了,我找到解决方案了。有一个属性叫做"sched_child_runs_first"。我们可以在以下路径中找到它:

/proc/sys/kernel/sched_child_runs_first。

取值为0或1。这决定了调度顺序。

最新更新