Win32進程如何獲得其父進程的pid?我正在將命令行上的pid傳遞給子進程,但有沒有辦法在Win32 API中執行此操作?或者,如果父母已經去世,有人可以減輕我的擔心,即我經過的pid可能會在一段時間后屬于另一個過程嗎?
3 回答
慕神8447489
TA貢獻1780條經驗 獲得超1個贊
請注意,如果父進程終止,則很可能甚至可能將PID重用于另一個進程。這是標準的Windows操作。
所以可以肯定的是,一旦你收到父母的id,并確定它真的是你的父母,你應該打開它的句柄并使用它。
藍山帝景
TA貢獻1843條經驗 獲得超7個贊
為了防止其他人遇到這個問題并且正在尋找代碼示例,我最近必須為我正在研究的Python庫項目執行此操作。這是我提出的測試/示例代碼:
#include <stdio.h>#include <windows.h>#include <tlhelp32.h>int main(int argc, char *argv[]) {
int pid = -1;
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe = { 0 };
pe.dwSize = sizeof(PROCESSENTRY32);
//assume first arg is the PID to get the PPID for, or use own PID
if (argc > 1) {
pid = atoi(argv[1]);
} else {
pid = GetCurrentProcessId();
}
if( Process32First(h, &pe)) {
do {
if (pe.th32ProcessID == pid) {
printf("PID: %i; PPID: %i\n", pid, pe.th32ParentProcessID);
}
} while( Process32Next(h, &pe));
}
CloseHandle(h);}
瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
更好的方法是調用DuplicateHandle()創建進程句柄的可繼承副本。然后創建子進程并在命令行上傳遞句柄值。 Close父進程中的重復句柄。當孩子完成后,它也需要Close復制
- 3 回答
- 0 關注
- 693 瀏覽
添加回答
舉報
0/150
提交
取消
