gpt4 book ai didi

c - 程序如何控制fork调用之间的切换

转载 作者:行者123 更新时间:2023-11-30 18:41:07 26 4
gpt4 key购买 nike

我最近开始了解 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(),您完全创建了一个具有自己的地址空间的新进程。这是子进程。 parent 是创造 child 的人。但它们共享相同的代码和输出终端。它们由操作系统独立调度来运行。因此,您无法预测 parent 打印和 child 打印的顺序。而且它们肯定不会按顺序排列,这就是您看到打印交错的原因。

关于c - 程序如何控制fork调用之间的切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23127363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com