|
|
发表于 2011-8-15 04:55:57
|
显示全部楼层
对于LZ提供的 "默认批处理" 其目的是获得所有进程的PID提供给"一个第三方程序process"使用,
当然这是一个错误的且不安全的代码:
1. 明显的,对于带有空格与特殊字符(如:&)的进程无法获得PID.
2. 对于拥有r0级的进程 "system idle process.exe" 是不能随意更改的 (它也未必有能力更改)
google 简单介绍下process.exe:
Command Line Process Viewer/Killer/Suspender for Windows NT/2000/XP V2.03
Copyright(C) 2002-2003 Craig.Peacock@beyondlogic.org
Usage: Process.exe [-v] [-t] [-c]
Process.exe [-q] [Process Name/PID] [timeout sec(optional)]
Process.exe [-k] [-s] [-r] [Process Name/PID]
Process.exe [-p] [Process Name/PID] {RealTime|High|AboveNormal|
Normal|BelowNormal|Low}
Process.exe [-a] [Process Name/PID] [Mask(To Set)]
-v View Processes. 查看进程
-t View Kernel and User CPU Times. 查看进程及其CPU耗时
-c View Process Creation Times. 查看进程创建时间
-q Send WM_CLOSE Message. Default timeout is 60 Sec 发送WM_CLOSE消息(即关闭),默认超时60s.
-k Kill Process. (Terminate) 强行关闭进程
-s Suspend Process. 挂起进程
-r Resume Suspended Process. 恢复挂起的进程
-p Set Process Priority. 设置进程优先级
-a Get/Set Affinity Mask of Process. CPU亲合力
CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行.
一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码可能会获得更好的性能.
一个CPU的亲合力掩码用一个cpu_set_t结构体来表示一个CPU集合,下面的几个宏分别对这个掩码集进行操作:
CPU_ZERO() 清空一个集合
CPU_SET()与CPU_CLR()分别对将一个给定的CPU号加到一个集合或者从一个集合中去掉.
CPU_ISSET()检查一个CPU号是否在这个集合中.
其实这几个的用法与select()函数那几个调用差不多.
下面两个函数就是最主要的了:
sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)
该函数设置进程为pid的这个进程,让它运行在mask所设定的CPU上.如果pid的值为0,则表示指定的是当前进程,使当前进程运行在mask所设定的那些CPU上.第二个参数cpusetsize是
mask所指定的数的长度.通常设定为sizeof(cpu_set_t).如果当前pid所指定的CPU此时没有运行在mask所指定的任意一个CPU上,则该指定的进程会从其它CPU上迁移到mask的指定的
在我的机器上sizeof(cpu_set_t)的大小为128,即一共有1024位.第一位代表一个CPU号.某一位为1则表示某进程可以运行在该位所代表的cpu上.例如
CPU_SET(1, &mask);
则mask所对应的第2位被设置为1.
此时如果printf("%d/n", mask.__bits[0]);就打印出2.表示第2位被置为1了.
- E:\DOS>Process.exe -a NOTEPAD.EXE
- Getting Affinity Mask for PID 2268 'NOTEPAD.EXE'
- System : 0x000f 0b00000000000000000000000000001111 [4 Installed Processor(s)]
- Process : 0x000f 0b00000000000000000000000000001111
复制代码 这是4核心CPU下的记事本默认状态, 想只在No.4运行 "Process.exe -a NOTEPAD.EXE 1000"即可.
code就不写了,感觉没有实际意义. |
|