说我有这样的脚本:
p = subprocess.Popen(['python forked_job.py'], shell=True)
status = p.wait()
# Do something with status
然后forked_job.py看起来像这样:
import os
import sys
print 'hi'
pid = os.fork()
if pid == 0:
sys.exit(do_some_work())
else:
sys.exit(do_other_work())
如何确保两个进程都返回0状态代码?
答案 0 :(得分:1)
当你分叉时,你有一个父进程和一个非父进程。当pid == 0时,你处于子进程中;您的其他声明是指您在父流程中的时间。
与调用Popen.wait
类似,就像在第一个脚本中一样,您想在第二个脚本中调用os.wait
。
来自the docs:
<强> os.wait()
等待完成子进程,并返回一个元组 包含其pid和退出状态指示:一个16位数字,其中 低字节是杀死进程的信号编号,其高位 byte是退出状态(如果信号编号为零);高位 如果生成了核心文件,则设置低字节。
可用性:Unix
如您所见,这当然假设您正在运行unix。由于os.fork
也只是Unix,这似乎很可能。
因此,让父母调用os.wait
并在父母返回的内容中反映状态。
有一点需要注意,尽管它可能并不重要,您可能已经意识到了。从技术上讲,你不这样做:
main_script
/ \
forked_job forked_job
但相反:
main_script
|
forked_job_parent
|
forked_job_child
(我试图显示&#34;所有权&#34;以及因此使用第二次等待。)