告诉execl()进程何时退出

wha*_*hat 1 c++ unix os.execl

我有一个c ++应用程序包含队列中的某些项目,然后这些项目将由python脚本处理.我想要它,以便最多运行10个python脚本实例.我计划使用execl()来启动python进程,有没有办法告诉进程已经退出而不必将消息传递回父进程?

Ale*_*lli 5

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)