用windows脚本改变进程的亲和力

Windows中,与

START /node 1 /affinity ff cmd /C "app.exe" 

我可以设置app.exe的亲和力(app.exe使用的核心数量)。

用Windows脚本,我怎样才能改变正在运行的进程的亲和力?

PowerShell可以为你做这个任务

获得亲和力:

 PowerShell "Get-Process app | Select-Object ProcessorAffinity" 

设置亲和性:

 PowerShell "$Process = Get-Process app; $Process.ProcessorAffinity=255" 

例如:(8核心处理器)

  • 核心# = = BitMask
  • 核心1 = 1 = 00000001
  • 核心2 = 2 = 00000010
  • 核心3 = 4 = 00000100
  • 核心4 = 8 = 00001000
  • 核心5 = 16 = 00010000
  • 核心6 = 32 = 00100000
  • 核心7 = 64 = 01000000
  • 核心8 = 128 = 10000000

只需将十进制值加在一起,即可使用哪个核心。 255 =全部8个核心。

  • 所有内核= 255 = 11111111

输出示例:

 C:\>PowerShell "Get-Process notepad++ | Select-Object ProcessorAffinity" ProcessorAffinity ----------------- 255 C:\>PowerShell "$Process = Get-Process notepad++; $Process.ProcessorAffinity=13" C:\>PowerShell "Get-Process notepad++ | Select-Object ProcessorAffinity" ProcessorAffinity ----------------- 13 C:\>PowerShell "$Process = Get-Process notepad++; $Process.ProcessorAffinity=255" C:\> 

资源:

这里是一个很好的详细的帖子,如何改变一个进程的亲和力: http : //www.energizedtech.com/2010/07/powershell-setting-processor-a.html

 wmic process where name="some.exe" call setpriority ProcessIDLevel 

我认为这些是优先级别 。您也可以使用PID而不是进程名称。

对于其他人寻找答案,而没有找到任何解决方案,我发现是使用一个名为WinAFC (或AffinityChanger)的应用程序。 这是一个局部GUI,部分命令行应用程序,允许您指定某些可执行文件的配置文件,并将轮询它们的进程列表。 如果找到匹配的进程,将根据加载的配置文件中的设置更改这些进程的关联性。

这里有一些文档: http : //affinitychanger.sourceforge.net/

为了我的目的,我创建了一个如下所示的配置文件:

 TestMode = 0 TimeInterval = 1 *\convert.exe := PAIR0+PAIR1 

此配置文件将任何convert.exe进程设置为使用前两个CPU内核对(CPU0,CPU1,CPU2和CPU3),每秒轮询一次。 TestMode是一个切换,可以让你看看你的个人资料是否正在工作,而没有真正设置亲和力。

希望有人认为这有用!

接受的答案是有效的,但仅限于列表中的第一个过程。 在评论中的解决方案不适合我。

要改变具有相同名称的所有进程的关联性,使用以下命令:

 Powershell "ForEach($PROCESS in GET-PROCESS processname) { $PROCESS .ProcessorAffinity=255}" 

其中255是被接受的答案中给出的掩码。 (不能评论,所以新的答案,对不起)