解决方法
有两个叉子,你最终会得到四个过程:一个父母,两个孩子和一个孙子.
由于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检查的进程.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。