我最近开始了解fork()系统调用,我已经编写了下面的程序。 我在下面的程序中的疑问在于它的输出。为什么程序只打印父printf的前十行,然后移动到子printf中的print语句,然后再回到父printf中的print语句。这是怎么回事?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t newpid;
int i =0;
newpid=fork();
if(newpid==0)
{
for(i=0;i<10;i++)
{
printf("child process pid %d number %d \n", newpid,i);
}
}
else
{
for(i=0;i<20;i++)
{
printf("parent process pid %d number %d \n", newpid,i);
}
}
return 0;
}
输出:
parent process pid 9224 number 0
parent process pid 9224 number 1
parent process pid 9224 number 2
parent process pid 9224 number 3
parent process pid 9224 number 4
parent process pid 9224 number 5
parent process pid 9224 number 6
parent process pid 9224 number 7
parent process pid 9224 number 8
parent process pid 9224 number 9
child process pid 0 number 0
parent process pid 9224 number 10
parent process pid 9224 number 11
parent process pid 9224 number 12
parent process pid 9224 number 13
parent process pid 9224 number 14
parent process pid 9224 number 15
child process pid 0 number 1
parent process pid 9224 number 16
child process pid 0 number 2
parent process pid 9224 number 17
child process pid 0 number 3
parent process pid 9224 number 18
parent process pid 9224 number 19
child process pid 0 number 4
child process pid 0 number 5
child process pid 0 number 6
child process pid 0 number 7
child process pid 0 number 8
child process pid 0 number 9
答案 0 :(得分:3)
通过fork(),您可以创建一个具有自己地址空间的新进程。这是儿童过程。父是创建孩子的父母。它们共享相同的代码和输出终端。他们将独立安排由操作系统运行。因此,您无法预测父母打印的顺序和孩子的打印将被看到。他们肯定不会有序,这就是为什么你看到打印交错。