Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从进程ID获取CPU信息_Objective C_C_Cocoa_Macos_Process - Fatal编程技术网

Objective c 从进程ID获取CPU信息

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

如果有人能帮我,那就太好了:)

这似乎是一个艰难的过程。从进程ID开始,我需要能够获取:

  • 进程占用多少CPU(以百分比表示)
  • 进程使用CPU的时间有多长
  • 这需要用Cocoa/Objective-C或C编写。它还需要通过雪豹处理老虎


    谢谢

    一个简单的方法是生成一个
    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应用程序的上述方法,但有时几秒钟过去了,没有返回值。这有意义吗?如何优化代码,使其在至少一个进程上快速运行?非常感谢。顺便说一句,伟大的投资组合!谢谢在这个问题的答案中,我还看到了其他解决方案的一些提示