Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改进程与windows脚本的关联性_Windows_Batch File_Affinity - Fatal编程技术网

更改进程与windows脚本的关联性

更改进程与windows脚本的关联性,windows,batch-file,affinity,Windows,Batch File,Affinity,在Windows中,使用 START /node 1 /affinity ff cmd /C "app.exe" 我可以设置app.exe的关联性(app.exe使用的内核数) 使用windows脚本,如何更改正在运行的进程的关联性 wmic process where name="some.exe" call setpriority ProcessIDLevel 我认为。您也可以使用PID而不是进程名。PowerShell可以为您完成此任务 获取亲缘关系: 设置关联: 示例:(8核处理器

在Windows中,使用

 START /node 1 /affinity ff cmd /C "app.exe"
我可以设置app.exe的关联性(app.exe使用的内核数)

使用windows脚本,如何更改正在运行的进程的关联性

wmic process where name="some.exe" call setpriority ProcessIDLevel
我认为。您也可以使用PID而不是进程名。

PowerShell可以为您完成此任务 获取亲缘关系: 设置关联: 示例:(8核处理器)
  • 核心#==位掩码
  • 核心1=1=0000000 1
  • 核心2=2=00000010
  • 芯3=4=00000100
  • 芯4=8=00001000
  • 核心5=16=00010000
  • 芯6=32=00100000
  • 核心7=64=01000000
  • 核心8=128=10000000
只需将要使用的核心的十进制值相加。255=所有8个核

  • 所有磁芯=255=11111
示例输出: 来源:

下面是一篇非常详细的文章,介绍如何更改流程的关联性:

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

这里有一些文档:

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

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
是公认答案中给出的掩码

如果你真的喜欢枚举,你可以这样做。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'

是否已启动进程?@npocmaka是,是否已启动进程。通过关联,我可以设置要使用的处理器或内核的具体数量。对于优先级,我只能设置优先级级别?是否要禁用/启用特定处理器上的进程?我不认为有一个wmi类可以提供这样的功能,但我会检查一下。另一个选项是使用windows附带的.net工具编译您自己的工具。批处理命令不可能。即使是jscript/vbscript在这里也没有帮助。我认为可以使用.net(可以嵌入批处理文件中),但我不知道需要多长时间。第一个命令很好用。但对于第二行,我收到以下消息:“在该对象上找不到属性'ProcessorAffinity'。请验证该属性是否存在并且可以设置。在第1行:char:32+$Process=get Process chrome;$Process.ProcessorAffinity=1+~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:InvalidOperation:(:)[],RuntimeException+FullyQualifiedErrorId:PropertyAsignmentException“如果有多个同名进程(如java),如何使用此选项?”?它是设置所有java进程的关联性,还是随机选择一个(或最低pid,等等)@DanielWiddis使用
Get Process java |…
将更改所有java进程的关联性。如果你只是想要一个特定的java实例,你必须知道并使用进程ID。例如,
Get process-ID 8500
,否则,你必须实现自己的过滤。如果你不想使用PowerShell,或者需要使用
cmd/start从命令提示符调用,请向通过Google阅读本文的任何人咨询"“/Affinity value
方法,核心Affinity实际上是十六进制的。e、 例如,要在16核CPU上使用13-16核启动进程,十进制值为
61440
,十六进制值为
0xF000
。使用
61440
将启动一个进程,使用内核6、10和12:-)有助于快速转换。需要在$process后面加上句点,如$process。ProcessorAffinity=255true,我更改了它。这非常冗长;只需使用
获取进程$processName |%{$\u0.ProcessorAffinity=$value;}仍然太冗长:使用
获取进程$pn |%{$\u0.ProcessorAffinity=$v}
/sStill太冗长-使用
(ps$p)。ProcessorAffinity=$v
/sI我发现这个程序有点不完整。我知道它很旧,所以不知道你是否仍然成功地使用它?它看起来很不错,但它只接收了一些节目,而不是其他节目。我已经很久没有这样做了。我知道这在当时对我有效。从那以后我就不需要使用这个程序了;这是一件短期的事情。
TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1
Powershell "ForEach($PROCESS in GET-PROCESS processname) { $PROCESS.ProcessorAffinity=255}"
[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'