【发布时间】:2014-04-17 07:43:31
【问题描述】:
我最近开始了解 fork() 系统调用,并编写了以下程序。 我在下面的程序中的疑问在于它的输出。为什么程序只打印父 printf 的前十行,然后移动到子 printf 中的打印语句,然后再次返回父 printf 中的打印语句。这是如何工作的?
#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
【问题讨论】:
-
因为在fork之后有两个进程独立运行。
-
因为有两个进程同时运行,并且在您的情况下它们共享同一个终端,因此输出会交错。
标签: c unix fork system system-calls