objective-c - 从进程 ID 获取 CPU 信息

标签 objective-c c cocoa macos process

如果有人可以帮助我,那就太好了:)

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

  1. 进程占用的 CPU 百分比,单位为 %
  2. 进程使用 CPU 多长时间

这需要用 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;
}

关于objective-c - 从进程 ID 获取 CPU 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505241/

相关文章:

ios - UiWebView 委托(delegate)方法未被调用

ios - 如何制作自定义 UITableViewCell 的父类(super class)?

c - 在 char 数组指针内赋值

objective-c - NSLayoutManager Text 新行似乎从矩形底部开始向上

objective-c - 如何在 Cocoa 中移动 Sprite ?

objective-c - 为什么用星号声明对象变量

ios - AWSS3TransferManagerErrorCancelled 是什么意思以及如何摆脱它?

iphone - 如何在 iOS 设备上创建新的 EKCalendar?

C编程: Generate random n-combinations from given set?

c++ - 结构/类成员的显式初始化