我刚刚开始使用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部分就是应该执行的部分。我的问题是:尽管我的代码的if部分不应该执行,但为什么代码在之后初始化调用child()函数。
提前感谢:)
发布于 2014-07-03 02:37:59
从fork返回后,现在有两个进程紧跟在fork之后执行代码。
所以你的声明是:
,因为我们已经在父进程中
只有一半是对的。在os.fork返回后,父进程继续以父进程的身份执行代码,但是子进程继续使用相同的局部变量和全局变量执行完全相同的代码,但fork的返回值除外。因此,从子进程的角度来看,newRef具有0的值,而从父进程的角度来看,newRef具有正值。两个进程都将相应地执行代码。
发布于 2014-07-03 02:36:56
当您调用os.fork时,您将创建一个与现有进程完全相同的新进程,只不过在原始进程中,fork返回新(子)进程的进程ID,而在新进程中,fork返回0。这种不同就是你如何在父进程和子进程中做一些不同的事情。
在您的特定代码中,子进程中fork的返回值为0,因此子进程调用child函数。在父级中,返回值不是0,因此将执行else子句。
https://stackoverflow.com/questions/24538466
复制相似问题