用2003的时候经常会遇到一些程序需要手动设置是用那颗CPU的那个核,有时该程序是以system用户启动的,管理员用户无法设置,网上搜了一些方法比如用计划任务启动任务管理器然后设置,我自己测试过了还是不行,没办法自己琢磨出一个方法了,经过测试也可以达到效果,方法如下:

start /affinity 核数 ***.exe 用这样的方式启动程序,启动的时候直接设置使用哪个CPU的哪个核。

以我用的服务器为例,2颗Xeon 5310 4核CPU,具体的CPU核对应的参数如下,0-7代表CPU的8个核心。

1 0

2 1

4 2

8 3

10 4

20 5

40 6

80 7

如果设置某进程用第一个CPU的第一个核,那么命令就是start /affinity 0 ***.exe,依次类推,如果需要两个或以上的核就把对应的数字相加,比如start /affinity 5 ***.exe,就是用的第一个CPU的第一和第三个核心。

那么如果想用第一个CPU的2、3核心呢?是不是start /affinity 12 ***.exe就可以了?实际上在我测试过之后发现,用了这条命令,系统会认为你指定的是第一个CPU的第二个核心和第二个CPU的第一个核心,因为它俩相加也刚好是12。同理,7、8核心用120设置也是错误的,系统会认为你指定的是第6个核心。

 后来仔细看affinity参数,发现后面指定了是要16进制的数字,那好吧,12就用C来表示,经过测试,完全没问题!那么120呢?当然是C0了,哈哈。

这样我们用一条命令,at 11:00 cmd.exe /C start  /affinity 1 ***.exe,就指定了11点的时候自动启动***.exe了,而且启动的时候使用的是第一个CPU的第一个核心。切记一定要用cmd.exe /C start的方式,不可以直接at 11:00 start,这样是起不来的。

 问题虽然解决了,但还是留下了两个新问题需要思考:

1. 按理说如果远程用console的模式连上去,是可以看到后台进程的,如果用system启动taskmgr应该就可以直接设置用哪个核心了,但是我试了好几次,无论是mstsc/console还是tsmm.msc连过去都不是console模式,但是却可以看见一些后台跑的进程,很奇怪,难道2003有别的不同?还是console模式就是看不见system启的进程呢?

问题1已经解决,方法如下:

1. at 11:00 /interactive cmd.exe

2.mstsc/console远程连上去

之前搞不定是因为at没有加interactive参数,所以即使console上去了也看不见,哎,参数害死人啊。。。

2.关于CPU的计算,网上有这样一段例子

The first argument is the processor affinity to use, represented as a base ten number (so 1 for processor 0, 2 for processor 1, 4 for processor 2, etc., 3 for processors 0 and 1, 5 for processors 0 and 2, 328 for processors 3, 6, and 8).

我也是通过这个例子来测试的,问题在于,按这种算法,第五个核应该是16才对,然后以此类推第9个是256,这样相加才对,但经过实际测试还是我的算法是正确的,不知道是不是CPU不同还是表示的单位不同呢?疑惑中。