gpt4 book ai didi

c - C 中的 Fork() 程序

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:37 25 4
gpt4 key购买 nike

所以我试图解决我书中关于 C 中的 fork 系统调用的问题。

下面是代码:

#include <stdio.h>
#include <unistd.h>

int main() {

int i = 1;

if (fork ()) //parent process will return PID of child.
i++;
else if (fork()) //child process (becomes parent)
i--;
else //grandchild process returns 0
i++;

printf("%d\n", i);
}

完成代码后,我得到了 2 0 2 作为解决方案。我很困惑,因为我不知道哪个顺序是正确的?子进程能否在父进程之前打印出来?如果是这样,另一个可行的解决方案可能是 0 2 2 或 2 2 0。 我如何知道是否会执行所有条件语句?我知道在第一个条件中,if 语句将被执行并将成为父进程(它将返回子进程的进程 ID,并且 i 的值将递增到 2)。我怎么知道 else ifelse 代码是否会被执行?抱歉,我只是很困惑并试图解决这个问题,因为这对我来说是一个新主题。

如有任何帮助,我们将不胜感激。提前谢谢你。

最佳答案

子进程可以在父进程完成之前打印出来。请记住,在父进程中,对 fork() 的调用返回一个非零数字,而在子进程中它将返回 0。

#include <stdio.h>
#include <unistd.h>

int main() {

int i = 1;

if (fork ())
i++;
else if (fork())
i--;
else
i++;

printf("%d\n", i);
}

对于上面的代码,父级执行第一个if()语句,子级执行else if语句,孙级执行else语句。 child /孙子/ parent 可以按任何顺序打印。因此,2 0 2、2 2 0 和 0 2 2 都是可行的解决方案。

关于c - C 中的 Fork() 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46312154/

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