如何获取子进程的PID?

时间:2012-11-16 14:59:45

标签: c windows pid

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

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以使用CreateToolhelp32Snapshot函数传递TH32CS_SNAPPROCESS值,然后调用Process32First方法,最后你必须迭代返回的集合并比较{{3的值}}字段对抗cmd.exe的PID。另一个选项是使用th32ParentProcessID WMI类使用ParentProcessId属性来过滤结果。

答案 1 :(得分:0)

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

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

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