如果我打电话怎么办:

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的新子CA的新子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检查的进程。

07-24 09:46
查看更多