在Windows 2012上更改活动进程的处理器组

时间:2018-04-18 05:02:06

标签: c# c++ windows visual-c++

由于突然在超过64个处理器的Windows 2012服务器上运行,我们不得不与多个处理器组竞争。

使用我们的设置,很难启动进程并指定目标处理器组,因此我们的目标是改变c#或c ++中许多进程的处理器组。

鉴于我们可以获得进程句柄列表,需要:

  1. 获取每个进程正在运行的处理器组

  2. 更新一组特定的流程'处理器组值可以更改它们正在运行的组。

2 个答案:

答案 0 :(得分:1)

创建时,Windows会将进程分配给组。它似乎不能直接改变。

要获取进程所属的处理器组列表(可以有多个),请调用GetProcessGroupAffinity

要更新流程的组,您必须使用SetThreadGroupAffinity更改流程的每个线程的组。当它刚刚启动并且只有一个线程时,这显然是最简单的。

答案 1 :(得分:0)

我想引用这个相关的MSDN论坛答案:Process Affinity on a System with 128 Processors

  

理论上你可以创建一个使用的小驱动程序   KeSetSystemGroupAffinityThread更改关联。我说进去了   理论,因为这是一个新的电话和有限的文件   可能行不通。当然,一旦你这样做,就会有一个问题   应用程序将工作,我假设你已阅读   http://download.microsoft.com/download/a/d/f/adf1347d-08dc-41a4-9084-623b1194d4b2/MoreThan64proc.docx   有关多个组和应用程序的警告   为了利用它们而写的。

另请参阅:Example usage of SetProcessAffinityMask in C++?