我正在尝试在AIX 5.1上使用python 2.4派生进程,我正在使用以下代码
def runcmd(cmd):
(pid, fd) = pty.fork()
argv = cmd.split()
if not pid:
print "In child process"
#time.sleep(1)
os.execv(argv[0],argv)
sys.exit()
print "In parent process"
if __name__ == "__main__":
print "In main"
runcmd("/bin/sh cmd1 -l")
问题是这段代码挂起,它只打印“在主”,它只是在那里锁定。但是,如果我用“time.sleep(1)”取消注释,它执行正常,它会分叉,一切正常,它会打印“在主要”,然后在“父进程”中打印它应该做什么。
据我所知,execv会覆盖正在执行的进程的图像并且它不会返回,但我无法理解为什么这段代码会挂在我的机器上。请注意,此代码适用于python 1.5,为什么它不在2.4上。
有人可以帮忙吗?是execv执行速度快,它也弄乱了父图像(我知道这听起来很愚蠢似乎它正在做那个,或者至少类似于这个)?
谢谢,Mircea