我在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中(每次运行代码时输出行为都相同)
答案 0 :(得分:3)
未指定进程在post-fork中运行的顺序。
答案 1 :(得分:3)
在fork()之后,不确定哪个进程 - 父进程或子进程可以访问CPU。在多处理器系统中,它们可以同时访问CPU。操作系统可以允许你控制这个命令。例如,Linux有/ proc / sys / kernel / sched_child_runs_first。