C 如何获取子进程的PID?

C 如何获取子进程的PID?,c,windows,pid,C,Windows,Pid,有没有办法获得子进程的PID?我的意思是,如果我使用CreateProcess打开cmd提示符,我知道它的PID,因为我可以从返回的ProcessInformation结构中获取它。但是,是否也可以获取从该命令提示符打开的进程的PID 谢谢 您可以使用传递TH32CS\u SNAPPROCESS值的函数,然后调用该方法,最后必须迭代返回的集合,并将字段的值与cmd.exe的PID进行比较。另一个选项是使用WMI类,使用ParentProcessId属性来过滤结果。使用创建作业,并使用将作业与I/

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

谢谢

您可以使用传递
TH32CS\u SNAPPROCESS
值的函数,然后调用该方法,最后必须迭代返回的集合,并将字段的值与cmd.exe的PID进行比较。另一个选项是使用WMI类,使用
ParentProcessId
属性来过滤结果。

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

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


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

因此,您实际上不希望PID来自子进程,而希望PID来自子进程。@alk:是的,这正是我想要的。这种方法确实适用于统计目的。为任何类型的IPC使用返回的PID都是不安全的,因为PID来来去去去,可能已经被重用。另一种方法是使用PSSetCreateProcessNotifyRoute编写一些内核模式代码,以实时监控所有进程的创建。这在Vista和更高版本中更麻烦,因为需要驱动程序签名,但对于XP来说,它可能是一个有用的替代方案。