start
Windows shell命令(在cmd.exe中)似乎能够启动 选择处理器关联的进程,而不是启动进程然后在启动后的某个(小)时间内设置所选的处理器关联。
start /affinity 2 something.exe
有没有办法在使用或不使用P-Invoke的.NET应用程序中执行相同的操作?呼叫cmd.exe /C start ...
并不重要。
Process
类具有ProcessorAffinity
属性,但如果您在调用InvalidOperationException
方法之前尝试设置它,则会抛出Start
。
答案 0 :(得分:4)
我怀疑start命令在这种情况下做的是启动进程暂停(即,在调用CreateProcess
时传递CREATE_SUSPENDED
),然后设置处理器亲和性,然后恢复线程。
这样,虽然进程存在而没有设置进程关联,但是当它启动执行时,已经设置了处理器关联,所以它只运行在指定的处理器上。
答案 1 :(得分:1)
我认为您不能在启动流程之前设置处理器关联,因为SetProcessAffinityMask Function的第一个参数是处理流程的。
另一方面,有一个名为Imagecfg的程序允许永久设置可执行文件的处理器关联,但我不确定它是如何工作的。