2009-06-13 55 views
1

我已经有了一个C++应用程序,它包含一个队列中的某些项目,然后这些项目将由一个python脚本处理。我希望它最多可以运行10个python脚本实例。我打算使用execl()来启动python进程,是否有办法告诉进程已经退出而不必将消息传递回父进程?告诉execl()进程何时退出

回答

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 

即你可以定期拨打电话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 
+0

返回你能够扩大对如何检查孩子的PID的检查,如果他们完成了吗?我不明白如何告诉我他们是否完成 – whatWhat 2009-06-14 02:21:25