2009-06-13 54 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