繁体   English   中英

使用 Windows 脚本更改进程的亲和力

[英]Change affinity of process with windows script

在 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 核处理器)

  • 核心 # == 位掩码
  • 核心 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

接受的答案有效,但仅适用于列表中的第一个进程。 评论中的解决方案对我不起作用。

要更改所有同名进程的亲和性,请使用以下命令:

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

其中255是已接受答案中给出的掩码。

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

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

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

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

此配置文件将任何 convert.exe 进程设置为使用前两个 CPU 内核对(CPU0、CPU1、CPU2 和 CPU3),每秒轮询一次。 TestMode是一个切换开关,可让您查看您的配置文件是否正常工作,而无需实际设置关联。

希望有人觉得这很有用!

如果你真的喜欢枚举,你可以这样做。 ProcessorAffinity 是一个 IntPtr,所以它需要一些额外的类型转换。

[flags()] Enum Cores {
  Core1 = 0x0001
  Core2 = 0x0002
  Core3 = 0x0004
  Core4 = 0x0008
  Core5 = 0x0010
  Core6 = 0x0020
  Core7 = 0x0040
  Core8 = 0x0080
}

$a = get-process notepad

[cores][int]$a.Processoraffinity
Core1, Core2, Core3, Core4

$a.ProcessorAffinity = [int][cores]'core1,core2,core3,core4'
wmic process where name="some.exe" call setpriority ProcessIDLevel

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM