Objective c 从进程ID获取CPU信息
如果有人能帮我,那就太好了:) 这似乎是一个艰难的过程。从进程ID开始,我需要能够获取:Objective c 从进程ID获取CPU信息,objective-c,c,cocoa,macos,process,Objective C,C,Cocoa,Macos,Process,如果有人能帮我,那就太好了:) 这似乎是一个艰难的过程。从进程ID开始,我需要能够获取: 进程占用多少CPU(以百分比表示) 进程使用CPU的时间有多长 这需要用Cocoa/Objective-C或C编写。它还需要通过雪豹处理老虎 谢谢 一个简单的方法是生成一个popen命令,并从ps获取一些输出 例如: #include <stdio.h> #include <string.h> #include <stdlib.h> void get_process_i
谢谢 一个简单的方法是生成一个
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;
}
#包括
#包括
#包括
无效获取进程信息(int pid){
字符ps_cmd[256];
sprintf(ps_cmd,“ps-O%%cpu-p%d”,pid);//请参阅手册页了解ps
文件*fp=popen(ps_cmd,“r”);
if(fp){
字符行[4096];
而(行==fgets(行,4096,fp)){
如果(atoi(行)=pid){
字符伪[256];
字符cpu[256];
字符时间[256];
//PID%CPU TT STAT TIME命令
//32324 0,0 s001 S+0:00.00 bc
sscanf(行,“%s%s%s%s%s”,虚拟,cpu,虚拟,虚拟,时间);
printf(“%s%s\n”,cpu,时间);//您需要分析这些字符串
pclose(fp);
返回;
}
}
pclose(fp);
}
}
int main(){
获取流程信息(32324);
返回0;
}
您忘记写“请”。另外,请注意我的编辑(第一行)。这似乎计算有点慢。我将对机器上当前的所有进程每秒运行一次,这可能不够有效。不过我给了你一张努力的票。至少你给了我一些东西:)@Eric如果你想得到所有进程的数据,它可以很容易地优化。让ps
命令输出全部并同时解析它们。每秒只调用一个popen
调用。目前,我每秒只调用Focus应用程序的上述方法,但有时几秒钟过去了,没有返回值。这有意义吗?如何优化代码,使其在至少一个进程上快速运行?非常感谢。顺便说一句,伟大的投资组合!谢谢在这个问题的答案中,我还看到了其他解决方案的一些提示