确保在父级被杀死时子进程被杀死的推荐方法是将它们放在Job对象中。但是,如果父进程在对CreateProcess和AssignProcessToJobObject的调用之间死亡,则子进程仍然存在。我怎样才能消除这种竞争条件?
答案 0 :(得分:1)
您可以使用CREATE_SUSPENDED
作为dwCreationFlags
CreateProcess
参数的标记之一。
然后,在调用PROCESS_INFORMATION
后,使用ResumeThread
结构中返回的线程句柄调用AssignProcessToJobObject
。
没有错误处理的伪代码:
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 :(得分:1)
您可以使用命名事件与奴隶应用程序同步: