如果我打电话怎么办:
if (fork() == fork())
//do something
parent 和 child 双方都输入对帐单吗?在这种情况下该怎么办?
最佳答案
使用两把 fork ,您将得到四个过程:一个 parent ,两个 child 和一个孙子。
由于C不需要从左到右对表达式进行求值,因此未定义两次派生的顺序。最后,先发生哪个无关紧要,所以让我们假设剩下的fork()
首先发生。发生这种情况时,您最终将只有一名 parent 和一名子女。 parent 将获得 child 的PID, child 将获得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
检查的进程。