我有一个c ++应用程序包含队列中的某些项目,然后这些项目将由python脚本处理.我想要它,以便最多运行10个python脚本实例.我计划使用execl()来启动python进程,有没有办法告诉进程已经退出而不必将消息传递回父进程?
execl
不启动进程 - 它使用另一个可执行文件覆盖现有进程.fork
确实启动了一个进程 - 并将子进程的id(又名pid
)返回给父进程(返回0到子进程,这就是孩子知道它是孩子的方式,所以它可以清理它们exec
).使用孩子们pid
检查他们是否完成,或者使用SIGCHLD来跟踪它.
我建议SIGCHLD
你不必"轮询"以查看某个进程是否已经终止,但后一种方法也不是太难 - 只需执行一次:
def whosdone(pids):
nope = []
done = []
for pid in pids:
try: os.kill(pid, 0)
except OSError: nope.append(pid)
else: done.append(pid)
return done, nope
Run Code Online (Sandbox Code Playgroud)
即你可以定期打电话done, pidslist = whosdone(pidslist)
,做你需要做的关于完成的PID的事情.当然,当你fork
使用成语时:
pid = os.fork()
if pid: # we're the parent process
pidslist.append(pid)
else: # we're the child process
# clean things up, etc, then exec
Run Code Online (Sandbox Code Playgroud)