2010-04-07 82 views

回答

1

有一个回答你的问题http://www.codeproject.com/KB/threads/ParentPID.aspx

总之,你创建lpfCreateToolhelp32Snapshot()运行的所有进程的快照,然后遍历它与lpfProcess32First()/lpfProcess32Next()找到你的进程(通过GetCurrentProcessId()标识)。一旦你找到了自己的流程,你得到的结构就为你提供了父进程的进程ID,这是运行你的应用的进程ID。

一旦你得到家长的PID,很容易获得exe文件的文件名和其他属性与EnumProcessModules()GetModuleFileNameEx()

但是,您大概可以使用链接中的代码。

1

为什么你需要知道这个? Windows并没有像unix那样维护一个严格的父级进程heirarchy,它记录了当进程创建时父进程的PID,但是当这个进程消失时它不会被更新(因为一个进程没有跟踪它的子进程,所以你无法更新它)。这意味着父进程PID有可能指向一个不再存在的进程。更糟糕的是,从理论上说,进程ID可以被重用,这意味着父进程ID可以指向完全不同的进程。