[英]Regarding The os.fork() Function In Python
我刚刚开始使用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()
根据我的理解,代码应该从调用父进程开始并显示其PID。 之后,调用os.fork()
并创建父进程的副本,因为我们已经在父进程中,所以newRef
变量应该包含一个肯定的值,而我的代码的else
部分是一个应该执行。 我的问题是:为什么代码会在之后启动调用child()
函数,尽管我的代码的if
部分不应该执行。
提前致谢 :)
从fork
返回后,您现在有两个进程在fork
立即执行代码。
所以你的声明:
因为我们已经在父进程中了
只是半真的。 在os.fork
返回之后,父进程继续执行代码作为父进程,但子进程继续执行具有相同本地和全局变量的完全相同的代码 ,但fork
的返回值除外。 因此,从子进程的角度来看, newRef
的值为0
,从父级的角度来看, newRef
的值为正值。 两个进程都将相应地执行代码。
当你调用os.fork
,你创建一个新进程,它是现有进程的精确副本, 除了在原始进程中, fork
返回新(子)进程的进程ID,并且在新进程中, fork
返回0
。 这种差异就是你如何在父母和孩子身上做出不同的事情。
在您的特定代码中,子项中fork
的返回值为0
,因此子进程调用child
。 在父级中,返回值不为0
,因此执行else子句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.