【发布时间】:2013-10-04 17:23:17
【问题描述】:
在 Windows 中,使用
START /node 1 /affinity ff cmd /C "app.exe"
我可以设置app.exe的亲和度(app.exe使用的核数)。
使用 windows 脚本,如何更改正在运行的进程的亲和力?
【问题讨论】:
标签: windows batch-file affinity
在 Windows 中,使用
START /node 1 /affinity ff cmd /C "app.exe"
我可以设置app.exe的亲和度(app.exe使用的核数)。
使用 windows 脚本,如何更改正在运行的进程的亲和力?
【问题讨论】:
标签: windows batch-file affinity
PowerShell "Get-Process app | Select-Object ProcessorAffinity"
PowerShell "$Process = Get-Process app; $Process.ProcessorAffinity=255"
只需将您要使用的内核的十进制值相加即可。 255 = 所有 8 个内核。
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
【讨论】:
Get-Process java | ... 将更改所有 java 进程的关联性。如果您只需要特定的 java 实例,则必须知道并使用进程 ID。例如Get-Process -ID 8500 否则,您将不得不实现自己的过滤。
cmd /start "" /Affinity value 方法从命令提示符调用,那么核心亲和力实际上是 十六进制。例如,要在 16 核 CPU 上使用 13-16 核启动进程,十进制值为61440,十六进制值为0xF000。使用 61440 将启动使用内核 6,10 和 12 的进程 :-) rapidtables.com/convert/number/binary-to-hex.html 对于快速转换很有用。
接受的答案有效,但仅适用于列表中的第一个进程。 cmets 中的解决方案对我不起作用。
要更改具有相同名称的所有进程的亲和性,请使用:
Powershell "ForEach($PROCESS in GET-PROCESS processname) { $PROCESS.ProcessorAffinity=255}"
255 是接受答案中给出的掩码。
【讨论】:
Get-Process $processName | % { $_.ProcessorAffinity = $value; };
Get-Process $pn| %{ $_.ProcessorAffinity = $v} /s
(ps $p).ProcessorAffinity=$v /s
如果你真的喜欢枚举,你可以这样做。 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'
【讨论】:
对于其他正在寻找答案但没有找到答案的人,我找到的解决方案是使用名为 WinAFC(或 AffinityChanger)的应用程序。这是一个部分 GUI、部分命令行应用程序,允许您为某些可执行文件指定配置文件,并将轮询它们的进程列表。如果找到匹配的进程,它将根据加载的配置文件中的设置更改这些进程的亲和性。
这里有一些文档:http://affinitychanger.sourceforge.net/
出于我的目的,我创建了一个如下所示的个人资料:
TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1
此配置文件将任何 convert.exe 进程设置为使用前两个 CPU 核心对(CPU0、CPU1、CPU2 和 CPU3),每秒轮询一次。 TestMode 是一个切换开关,让您无需实际设置关联即可查看您的个人资料是否正常工作。
希望有人觉得这很有用!
【讨论】:
wmic process where name="some.exe" call setpriority ProcessIDLevel
我认为these are the priority levels 。您也可以使用 PID 代替进程名称。
【讨论】: