用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不同还是表示的单位不同呢?疑惑中。
转载于:https://blog.51cto.com/madman/440142