gpt4 book ai didi

C Fork程序输出解释

转载 作者:行者123 更新时间:2023-12-02 19:56:16 26 4
gpt4 key购买 nike

我有一个 C 程序,它使用 fork() 系统调用:

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

void doit(void)
{
pid_t pid;
fork();
fork();
printf("Unix System Programming\n");
return;
}

int main(void)
{
doit();
printf("WTF\n");
exit(0);
}

现在,这个程序给出了 8 行输出。我认为这是因为两个 fork 2^2 = 4 次 * 2 Print Statement = 8 次。如果我错了,请纠正我并解释原因。

现在的问题是为什么我每次运行都会得到不同的输出?假设我执行此代码:第一次获得输出

Unix System Programming
WTF
Unix System Programming
Unix System Programming
Unix System Programming
WTF
WTF
WTF

第二次我得到:

Unix System Programming
WTF
Unix System Programming
Unix System Programming
WTF
Unix System Programming
WTF
WTF

第三次又不同了。为什么会出现这种情况?我一无所知;请详细解释一下。

最佳答案

当您派生一个新进程时,父进程和子进程都会同时运行。它们执行各自 printf() 语句的顺序是不可预测的——有时父级会先打印,有时子级会先打印。

如果在输出中包含 PID,您可能会更好地理解,这样您就可以看到哪个进程正在打印每一行。所以将其更改为:

printf("%d: Unix System Programming\n", getpid());

printf("%d: WTF\n", getpid());

您应该看到的是,每个进程在 WTF 之前打印 Unix System Planning,但进程的顺序会混淆。

关于C Fork程序输出解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554643/

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