2010-04-07 119 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可以指向完全不同的進程。