Winapi 避免CreateProcess和AssignProcessToJobObject之间的时间窗口
确保在终止父进程时终止子进程的建议方法是将它们放入作业对象中。但是,如果父进程在调用CreateProcess和AssignProcessToJobObject之间死亡,则子进程将继续存在。如何消除此争用条件?您可以使用Winapi 避免CreateProcess和AssignProcessToJobObject之间的时间窗口,winapi,process,Winapi,Process,确保在终止父进程时终止子进程的建议方法是将它们放入作业对象中。但是,如果父进程在调用CreateProcess和AssignProcessToJobObject之间死亡,则子进程将继续存在。如何消除此争用条件?您可以使用CREATE\u SUSPENDED作为CreateProcess的dwCreationFlags参数的标志之一 然后,在调用AssignProcessToJobObject之后,使用PROCESS\u INFORMATION结构中返回的线程句柄调用ResumeThread 无
CREATE\u SUSPENDED
作为CreateProcess
的dwCreationFlags
参数的标志之一
然后,在调用AssignProcessToJobObject
之后,使用PROCESS\u INFORMATION
结构中返回的线程句柄调用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);
您可以使用命名事件与从属应用程序同步:
- master创建命名事件Z
- 主进程启动从进程
- 从属进程打开命名事件并等待信号状态
- 主进程做作业对象的事情
- 主进程设置事件Z
- 从属对象看到事件Z集合并继续执行它应该执行的操作,或者在超时时(若主进程在将从属进程分配给作业对象之前死亡),立即退出