为什么if块在else之后执行?

时间:2013-09-12 10:22:21

标签: python fork

import os
pid = os.fork()
if pid == 0:
        print("This is the child")
else:
        print("the child is pid %d" % pid)

在上面代码的输出中,if和else块都被执行了。首先是else,然后是if。预期会出现这种情况吗?

1 个答案:

答案 0 :(得分:4)

行为有效地未指明。

正如您(可能)知道fork()复制当前流程。在一个实例中,它返回0,在另一个实例中,它返回新进程的pid。

所以这两个部分都被采用了,因为你实际上已经执行了两次。

哪一个先行?这取决于操作系统首先选择安排的两个进程中的哪一个。根据操作系统的不同,可能存在趋势,或者可能总是相同,但您不应该依赖于此行为。