我正在尝试在 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")
问题是这段代码挂起,它只打印“In main”并且它只是保持锁定状态。但是,如果我用“time.sleep(1)”取消注释它执行得很好,它会分叉并且一切正常,它会打印“In main”,然后打印“In parent process”它应该做什么。
据我所知, execv 覆盖了正在执行的进程的图像并且它没有返回,但我不明白为什么这段代码会挂在我的机器上。请注意,此代码适用于 python 1.5 ,为什么它不能在 2.4 上运行超出了我的范围。
任何人都可以帮忙吗?execv 是否执行得很快并且它也弄乱了父图像(我知道这听起来很愚蠢,似乎它正在这样做,或者至少类似于这个)?
谢谢,米尔恰