有没有办法获取子进程的PID?我的意思是,如果我使用 CreateProcess 打开一个 cmd 提示符,我知道它的 PID,因为我可以从返回的 ProcessInformation 结构中获取它。但是是否也可以获取从该命令提示符打开的进程的 PID?
谢谢!
您可以使用CreateToolhelp32Snapshot
传递TH32CS_SNAPPROCESS
值的函数,然后调用Process32First
方法,最后您必须遍历返回的集合并将th32ParentProcessID
字段的值与 cmd.exe 的 PID 进行比较。另一种选择是使用Win32_Process
WMI 类使用ParentProcessId
属性来过滤结果。
使用CreateJobObject创建作业,并使用SetInformationJobObject将作业与 I/O 完成端口关联;有关更多详细信息,请参阅JOBOBJECT_ASSOCIATE_COMPLETION_PORT。使用AssignProcessToJobObject创建流程CREATE_SUSPENDED
并使用AssignProcessToJobObject使新流程成为作业的一部分。
请记住,有时新的孙子进程在您看到进程 ID 时已经退出,并且可以重用该进程。如果您使用OpenProcess来获取孙进程的句柄,请确保正确处理错误,如果您成功打开句柄,请确保调用IsProcessInJob以验证句柄确实指向孙进程之一。
由于在 Windows 8/2012 之前无法嵌套进程,因此您可能需要CREATE_BREAKAWAY_FROM_JOB
在创建子进程时使用该标志。