我正在创建一个流程CreateProcess
:
- 带旗帜
CREATE_NO_WINDOW | CREATE_BREAKAWAY_FROM_JOB | CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS
InheritHandles
参数 =TRUE
- startupinfo 标准输出和标准错误文件重定向 (
STARTF_USESTDHANDLES
) SECURITY_ATTRIBUTES.InheritHandle = TRUE
进程在继续执行时关闭的句柄。
然后我通过获取具有给定 PID 的进程的句柄来检查进程状态:
HANDLE HProcess = OpenProcess(
PROCESS_QUERY_INFORMATION , TRUE, task->taskPid);
编辑:是的,我正在检查返回的进程是否真的是我查询的进程:
if ( ( HProcess != NULL ) && ( GetProcessId(HProcess) != requestedPid ) )
无论创建的进程是否真的在运行,我都会得到该进程的有效句柄。如果我重新启动我的应用程序,检查代码将正常工作。我怀疑句柄以某种方式被缓冲,或者创建的进程在同一个组中 - 但我似乎无法在文档中找到任何关于它的信息。