关于Python中的os.fork()函数

use*_*561 6 python fork

我刚刚开始使用python,我开发了一个简单的程序来分叉父进程.这是我到目前为止编写的代码......

#!/usr/bin/env python
import os

def child():
    print "We are in the child process with PID= %d"%os.getpid()

def parent():
    print "We are in the parent process with PID= %d"%os.getpid()
    newRef=os.fork()
    if newRef==0:
        child()
    else:
        print "We are in the parent process and our child process has PID= %d"%newRef

parent()
Run Code Online (Sandbox Code Playgroud)

根据我的理解,代码应该从调用父进程开始并显示其PID.然后,os.fork()调用它并创建父进程的副本,并且因为我们已经在父进程中,所以该newRef变量应该包含一个肯定的值,else而我的代码部分应该是应该执行的那个.我的问题是:为什么代码会在child()之后启动调用函数,尽管if我的代码部分不应该执行.

提前致谢 :)

Chr*_*ker 16

从您返回后fork,您现在有两个进程紧跟在后面执行代码fork.

所以你的声明:

因为我们已经在父进程中了

只是半真的.后os.fork返回时,父进程继续执行代码的父进程,而子进程继续执行完全相同的代码具有相同本地和全局变量,用的返回值的例外fork.所以,从子进程的角度来看,newRef具有的价值0,并从父母的角度来看,newRef具有正值.两个进程都将相应地执行代码.


mur*_*d99 7

调用时os.fork,创建一个新进程,它是现有进程的精确副本,在原始进程中,fork返回新(子)进程的进程ID,并在新进程中fork返回0.这种差异就是你如何在父母和孩子身上做出不同的事情.

在您的特定代码中,子进程的返回值fork0,因此子进程调用该child函数.在父级中,返回值不是0,因此执行else子句.