2013-07-12 21 views

回答

1

您可以使用CREATE_SUSPENDED作爲CreateProcess參數dwCreationFlags參數之一的標誌之一。

MSDN reference here

然後,使用PROCESS_INFORMATION結構中返回的線程句柄在調用AssignProcessToJobObject之後調用ResumeThread

僞代碼沒有錯誤處理:

STARTUPINFO startUp; 
PROCESS_INFORMATION processInfo; 

CreateProcess (NULL, /* whatever */, NULL, NULL, TRUE, 
    CREATE_SUSPENDED | CREATE_NEW_PROCESS_GROUP, NULL, NULL, 
    &startUp, &processInfo); 

AssignProcessToJobObject(hJobObject, processInfo.hProcess); 

ResumeThread (processInfo.hThread); 
+1

您的代碼在作業對象中捕獲它之前會防止孩子產生更多的進程,但是如果父代在AssignProcessToJobObject之前死亡,則子代會泄漏。 –

1

您可以使用名爲事件您從應用程序同步:

  • 主創建一個名爲事件ž
  • 主機啓動從屬進程
  • 從屬進程打開命名事件並等待信號狀態
  • m aster進程執行作業對象事件
  • 主進程集事件Z
  • 從對象看到事件Z集並繼續執行它應該執行的操作或超時(如果主進程在將從進程分配給作業對象之前死亡)只是立即退出
+0

我不寫孩子程序,但CREATE_SUSPENDED,在另一個答案中提到,具有與您的事件相同的效果。我的問題是父母可能在產生孩子之後並在將其添加到作業對象之前死亡。 –

+0

這樣,如果在將從屬進程添加到作業對象之前主進程被終止,則子進程會立即終止。 –

+0

我現在明白了。不過這對我並不適用,因爲我正在爲我的孩子調用一個預先存在的exe文件。我不能重寫它來遵循你的協議。 –