c – fork()输出

c – fork()输出,第1张

概述我有以下代码: int main(){ if (fork() + fork()) printf("Boom!\n"); return 0;} 我不明白为什么这段代码打印消息3次. 有人可以解释一下吗? 对于父进程,Fork返回非零,对子进程返回零. 所以父进程分叉,创建一个子进程(fork1).这个子进程将再次fork(它将执行第二个fork)(fork2).创建第二个子进程. 我有以下代码:

int main(){  if (fork() + fork())     printf("Boom!\n");  return 0;}

我不明白为什么这段代码打印消息3次.

有人可以解释一下吗?

解决方法 对于父进程,Fork返回非零,对子进程返回零.

所以父进程分叉,创建一个子进程(fork1).这个子进程将再次fork(它将执行第二个fork)(fork2).创建第二个子进程.然后父进程将分叉第二个fork调用,创建第三个进程(fork3).所以我们将得到这样的树结构:

Parent  fork1            fork3       fork2

现在请注意,对于子进程,在fork之前执行的所有调用的值都是从父进程继承的.如果我们使用这个,我们得到:

> Parent将具有非零返回值,因为fork()调用都返回非零值
> fork1将具有非零返回值,因为最后一个fork返回非零值
> fork2将返回零值,因为第一个fork为零(这是从fork1继承),第二个fork也将返回零(fork2在第二个fork中创建).
> fork3将具有非零返回值,因为它从Parent继承了第一个fork值.

当fork()fork()非零时,将执行if.因此3次繁荣!

总结

以上是内存溢出为你收集整理的c – fork()输出全部内容,希望文章能够帮你解决c – fork()输出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存