c – 如果进退两难,请进行内部分叉

c – 如果进退两难,请进行内部分叉,第1张

概述如果我打电话会怎么样 if (fork() == fork()) //do something 在这种情况下,父母和两个孩子都会参与陈述或程序是什么? 有两个叉子,你最终会得到四个过程:一个父母,两个孩子和一个孙子. 由于C不要求从左到右计算表达式,因此未定义两个叉子发生的顺序.最后,首先发生的事情并不重要,所以让我们先假装左叉()发生.当发生这种情况时,你最终会得到一个父母和一个孩子.父母 如果我打电话会怎么样

if (fork() == fork())   //do something

在这种情况下,父母和两个孩子都会参与陈述或程序是什么?

解决方法@H_419_17@ 有两个叉子,你最终会得到四个过程:一个父母,两个孩子和一个孙子.

由于C不要求从左到右计算表达式,因此未定义两个叉子发生的顺序.最后,首先发生的事情并不重要,所以让我们先假装左叉()发生.当发生这种情况时,你最终会得到一个父母和一个孩子.父母将获得孩子的PID,孩子将获得0.

让我们调用父A和子B.这是左叉执行后这两个进程的样子:

A          if (<pIDof B> == fork())|+--B       if (0 == fork())

现在他们每个人都会执行正确的分叉.两个过程变为四个.让我们调用B的新子C和A的新子D.再次,每个fork()调用将返回两个值中的一个:父进程中的新子PID,或子进程中的0.以下是我们的四个流程将成为什么:

A          if (<pIDof B> == <pIDof D>)|+--B       if (0 == <pIDof C>)|  ||  +--C    if (0 == 0)|+--D       if (<pIDof B> == 0)

碰巧,进程C将是唯一通过if检查的进程.

总结

以上是内存溢出为你收集整理的c – 如果进退两难,请进行内部分叉全部内容,希望文章能够帮你解决c – 如果进退两难,请进行内部分叉所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/langs/1216248.html

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

发表评论

登录后才能评论

评论列表(0条)

保存