gpt4 book ai didi

c - 在 if 条件中使用 fork

转载 作者:行者123 更新时间:2023-11-30 16:38:15 24 4
gpt4 key购买 nike

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

void fork4 ()
{
printf("\n [%d] L0 \n", getpid());
if ( fork() != 0 )
{
printf("\n [%d] L1 \n" , getpid());
if ( fork() != 0)
{
printf("\n [%d] L2 \n" , getpid());
fork();
}
}
printf("\n [%d] Bye \n" , getpid());
}

int main()
{
fork4();
return 0;
}

输出:

 [4141] L0 

[4141] L1

[4142] Bye

[4141] L2

[4141] Bye

[4143] Bye

[4144] Bye

我试图了解到底发生了什么,但输出非常奇怪!我不明白为什么父进程可以进入第一个if作用域!如果有人解释一下这里发生了什么可以吗?

最佳答案

注意输出。

您可以看到只有ID:4141的进程才能进入if语句。因为子进程创建成功后,fork()的返回值就是子进程ID。

进程id:4141是您的父进程。这个进程正在调用fork()语句,它创建了子进程4142,4143,4144...

这些进程 (4142,4143) 都不能进入您的 if 语句。因为对于这些进程,成功执行 fork() 语句后返回值为零。

对于进程41424143,它们从fork()创建后执行的下一个语句是“Bye”语句。

关于c - 在 if 条件中使用 fork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560737/

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