有没有办法获得子进程的PID?我的意思是,如果我使用CreateProcess打开cmd提示符,我知道它的PID,因为我可以从返回的ProcessInformation结构中获取它。但是也可以从这个命令提示符中获取进程的PID吗?
谢谢!
答案 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
标志。