0

有没有办法获取子进程的PID?我的意思是,如果我使用 CreateProcess 打开一个 cmd 提示符,我知道它的 PID,因为我可以从返回的 ProcessInformation 结构中获取它。但是是否也可以获取从该命令提示符打开的进程的 PID?

谢谢!

4

2 回答 2

1

您可以使用CreateToolhelp32Snapshot传递TH32CS_SNAPPROCESS值的函数,然后调用Process32First方法,最后您必须遍历返回的集合并将th32ParentProcessID字段的值与 cmd.exe 的 PID 进行比较。另一种选择是使用Win32_ProcessWMI 类使用ParentProcessId属性来过滤结果。

于 2012-11-16T15:16:54.070 回答
0

使用CreateJobObject创建作业,并使用SetInformationJobObject将作业与 I/O 完成端口关联;有关更多详细信息,请参阅JOBOBJECT_ASSOCIATE_COMPLETION_PORT。使用AssignProcessToJobObject创建流程CREATE_SUSPENDED并使用AssignProcessToJobObject使新流程成为作业的一部分。

请记住,有时新的孙子进程在您看到进程 ID 时已经退出,并且可以重用该进程。如果您使用OpenProcess来获取孙进程的句柄,请确保正确处理错误,如果您成功打开句柄,请确保调用IsProcessInJob以验证句柄确实指向孙进程之一。

由于在 Windows 8/2012 之前无法嵌套进程,因此您可能需要CREATE_BREAKAWAY_FROM_JOB在创建子进程时使用该标志。

于 2012-11-18T21:42:31.100 回答