如果任何人都可以请帮助我,那将是巨大的:)获取CPU信息
这似乎是一个艰难的一个。从过程ID开始,我需要能够抓住:
- 占用多少CPU的过程是在%占用
- 进程已经使用CPU
这需要多久要用Cocoa/Objective-C或C编写。它还需要通过Snow Leopard在Tiger上工作。
谢谢!
如果任何人都可以请帮助我,那将是巨大的:)获取CPU信息
这似乎是一个艰难的一个。从过程ID开始,我需要能够抓住:
这需要多久要用Cocoa/Objective-C或C编写。它还需要通过Snow Leopard在Tiger上工作。
谢谢!
一个粗略的方法是产生一个popen
命令并从ps
获取一些输出。
即是这样的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void get_process_info(int pid) {
char ps_cmd[256];
sprintf(ps_cmd, "ps -O %%cpu -p %d", pid); // see man page for ps
FILE *fp = popen(ps_cmd, "r");
if (fp) {
char line[4096];
while (line == fgets(line, 4096, fp)) {
if (atoi(line) == pid) {
char dummy[256];
char cpu[256];
char time[256];
// PID %CPU TT STAT TIME COMMAND
// 32324 0,0 s001 S+ 0:00.00 bc
sscanf(line, "%s %s %s %s %s", dummy, cpu, dummy, dummy, time);
printf("%s %s\n", cpu, time); // you will need to parse these strings
pclose(fp);
return;
}
}
pclose(fp);
}
}
int main() {
get_process_info(32324);
return 0;
}
这似乎计算有点慢。我将每秒钟对机器上当前的所有进程执行此操作,这可能不够高效。尽管我给了你一个投票。至少你给了我一些东西:) – 2010-08-18 08:38:24
@Eric如果你想获得所有进程的数据,可以很容易地进行优化。让'ps'命令输出全部并且同时解析它们。这只会是每秒钟一次“popen”呼叫。 – epatel 2010-08-18 09:06:02
目前,我每秒钟都会为Focus应用程序调用上述方法,但有时候几秒钟内没有返回值。这有意义吗?我怎样才能优化代码,以便在至少一个进程中快速运行? 非常感谢。 Btw伟大的投资组合! – 2010-08-18 09:41:02
你忘了写上 “请”。 – Eimantas 2010-08-17 17:43:13
另外,请注意我的编辑(第一行)。 – 2010-08-17 17:59:40