【发布时间】:2010-09-22 19:58:39
【问题描述】:
我的应用程序的一部分在 windows 下的 C++ 中。我需要当前进程的进程 ID。有什么想法吗?
【问题讨论】:
-
我第一次读它是“摆脱当前进程”:)
-
@Otherside 让我在词汇表中查找
我的应用程序的一部分在 windows 下的 C++ 中。我需要当前进程的进程 ID。有什么想法吗?
【问题讨论】:
GetCurrentProcessId 函数将执行此操作。
【讨论】:
_getpid() 只是调用GetCurrentProcessId()。进程id只有一个,返回它的最底层函数是GetCurrentProcessId()。
我已经习惯了看到码码来完成看似简单的任务,我对GetCurrentProcessId 的直接性感到惊喜。今天早些时候,我看到它在调试器中运行,当时我在 DllMain 例程中跟踪了一段新代码,该例程将进程 ID 与嵌入式 GUID 结合起来,为互斥体创建本地唯一名称。
以下是整个例程,所有三个机器指令。
mov eax,fs:[00000018]
mov eax,dword ptr [eax+20h]
ret
顺便说一句,另外两个非常简单的 Windows API 函数是 GetLastError 和 SetLastError;确实,两者都与这个非常相似。
【讨论】:
您可以使用 getpid() 或 _getpid() ,它们在 <process.h> 库中定义。
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getpid?view=vs-2019
【讨论】:
_getpid() 只是调用 GetCurrentProcessId(),这是返回进程 ID 的最低级别函数。
GetCurrentProcessId()但是我运行不了,因为我没有包含<windows.h>库,这个在之前的答案中没有提到。经过几次尝试,我明白了。