猿问
下载APP

请问Win32进程如何获得其父进程的pid?

Win32进程如何获得其父进程的pid?

我正在将命令行上的pid传递给子进程,但有没有办法在Win32 API中执行此操作?或者,如果父母已经去世,有人可以减轻我的担心,即我经过的pid可能会在一段时间后属于另一个过程吗?


当年话下
浏览 58回答 3
3回答

慕神8447489

请注意,如果父进程终止,则很可能甚至可能将PID重用于另一个进程。这是标准的Windows操作。所以可以肯定的是,一旦你收到父母的id,并确定它真的是你的父母,你应该打开它的句柄并使用它。

蓝山帝景

为了防止其他人遇到这个问题并且正在寻找代码示例,我最近必须为我正在研究的Python库项目执行此操作。这是我提出的测试/示例代码:#include&nbsp;<stdio.h>#include&nbsp;<windows.h>#include&nbsp;<tlhelp32.h>int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pid&nbsp;=&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;h&nbsp;=&nbsp;CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;PROCESSENTRY32&nbsp;pe&nbsp;=&nbsp;{&nbsp;0&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;pe.dwSize&nbsp;=&nbsp;sizeof(PROCESSENTRY32); &nbsp;&nbsp;&nbsp;&nbsp;//assume&nbsp;first&nbsp;arg&nbsp;is&nbsp;the&nbsp;PID&nbsp;to&nbsp;get&nbsp;the&nbsp;PPID&nbsp;for,&nbsp;or&nbsp;use&nbsp;own&nbsp;PID &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(argc&nbsp;>&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pid&nbsp;=&nbsp;atoi(argv[1]); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pid&nbsp;=&nbsp;GetCurrentProcessId(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;Process32First(h,&nbsp;&pe))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pe.th32ProcessID&nbsp;==&nbsp;pid)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("PID:&nbsp;%i;&nbsp;PPID:&nbsp;%i\n",&nbsp;pid,&nbsp;pe.th32ParentProcessID); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;while(&nbsp;Process32Next(h,&nbsp;&pe)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(h);}

潇潇雨雨

更好的方法是调用DuplicateHandle()创建进程句柄的可继承副本。然后创建子进程并在命令行上传递句柄值。&nbsp;Close父进程中的重复句柄。当孩子完成后,它也需要Close复制
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答