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 – 如果进退两难,请进行内部分叉所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)