在Cygwin(在Windows上)和Linux上是不同的Fork()

时间:2015-02-18 05:51:14

标签: linux windows cygwin fork pid

我在Linux和Cygwin(在Windows上)使用此代码,输出顺序不同,我不知道为什么......

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>



int main()
{
        pid_t pid;

        /* fork a child process */
        pid = fork();

        printf("\n PID1 %d\n",pid);

        pid = fork();

        printf("\n PID2 %d\n",pid);

        return 0;
}

Windows中的输出是:

 PID1 3888

 PID1 0


 PID2 5564
 PID2 7772

 PID2 0

 PID2 0  

但在Linux(和MAC)中它看起来像

PID1 2486

 PID2 2487

 PID2 0

 PID1 0

 PID2 2488

 PID2 0

我的问题是PID2(PID2 2487)出现在Linux中的PID1之前,而不是在Windows中(每次运行代码时输出行为都相同)

2 个答案:

答案 0 :(得分:3)

未指定进程在post-fork中运行的顺序。

答案 1 :(得分:3)

在fork()之后,不确定哪个进程 - 父进程或子进程可以访问CPU。在多处理器系统中,它们可以同时访问CPU。操作系统可以允许你控制这个命令。例如,Linux有/ proc / sys / kernel / sched_child_runs_first。