确保子进程在父进程被杀死时被杀死的推荐方法是将它们放在 Job 对象中。但是,如果父进程在调用 CreateProcess 和 AssignProcessToJobObject 之间死亡,则子进程继续存在。我怎样才能消除这种竞争条件?
问问题
578 次
2 回答
1
您可以使用命名事件与您的从属应用程序同步:
- 主创建命名事件 Z
- 主进程启动从进程
- 从进程打开命名事件并等待信号状态
- 主进程做作业对象的事情
- 主进程设置事件 Z
- 从属对象看到事件 Z 设置并继续它应该做的事情,或者在超时时(如果主进程在将从属进程分配给作业对象之前死亡)立即退出
于 2013-07-13T12:20:17.703 回答
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);
于 2013-07-13T08:14:44.403 回答