在Windows中,使用
START /node 1 /affinity ff cmd /C "app.exe"
我可以设置app.exe的亲和力(app.exe使用的核心数)。
使用Windows脚本,如何更改正在运行的进程的亲和力?
答案 0 :(得分:13)
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 强>
答案 1 :(得分:3)
接受的答案有效,但仅适用于列表中的第一个进程。评论中的解决方案对我不起作用。
要更改具有相同名称的所有进程的亲缘关系,请使用以下命令:
Powershell "ForEach($PROCESS in GET-PROCESS processname) { $PROCESS.ProcessorAffinity=255}"
其中255
是接受答案中给出的掩码。
答案 2 :(得分:2)
对于其他寻找答案但未找到任何答案的人,我发现的解决方案是使用名为WinAFC(或AffinityChanger)的应用程序。这是一个部分GUI,部分命令行应用程序,允许您为某些可执行文件指定配置文件,并将轮询它们的进程列表。如果找到匹配的进程,它将根据加载的配置文件中的设置更改这些进程的关联。
这里有一些文档:http://affinitychanger.sourceforge.net/
出于我的目的,我创建了一个如下所示的个人资料:
TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1
此配置文件将任何convert.exe进程设置为使用前两个CPU核心对(CPU0,CPU1,CPU2和CPU3),每秒轮询一次。 TestMode
是一个切换按钮,可让您查看自己的个人资料是否有效,而无需实际设置亲和力。
希望有人觉得这很有用!
答案 3 :(得分:1)
wmic process where name="some.exe" call setpriority ProcessIDLevel
我认为these are the priority levels。您也可以使用PID而不是进程名称。
答案 4 :(得分:0)
如果您真的喜欢枚举,则可以通过这种方式进行。 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'