C MAC获取所有进程和当前进程的CPU使用率

蓝色海洋 2024-08-04 ⋅ 25 阅读

简介

在开发Mac应用程序时,有时候需要获取系统中所有进程的CPU使用率,或者只是当前进程的CPU使用率。本篇博客将介绍如何使用C++编程语言来实现这一功能。

获取所有进程的CPU使用率

首先,我们需要使用sysctl函数获取系统中所有进程的信息。具体步骤如下:

  1. 导入相关的头文件:
#include <sys/types.h>
#include <sys/sysctl.h>
  1. 定义一个数据结构kinfo_proc来保存进程信息:
struct kinfo_proc {
    struct extern_proc kp_proc;  // 进程信息
    struct task_basic_info kp_taskinfo;  // 进程基本信息
};
  1. 使用sysctl函数获取所有进程的信息:
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
size_t size = 0;
sysctl(mib, 4, NULL, &size, NULL, 0);

kinfo_proc *procs = new kinfo_proc[size/sizeof(kinfo_proc)];
sysctl(mib, 4, procs, &size, NULL, 0);

int count = size / sizeof(kinfo_proc);
  1. 遍历进程信息,计算CPU使用率:
for (int i = 0; i < count; ++i) {
    float cpuUsage = procs[i].kp_taskinfo.cpu_usage / (float)TH_USAGE_SCALE * 100.0;
    printf("Process: %s, CPU Usage: %.2f%%\n", procs[i].kp_proc.p_comm, cpuUsage);
}

delete []procs;

获取当前进程的CPU使用率

如果只需要获取当前进程的CPU使用率,可以使用task_info函数来获取进程的基本信息。具体步骤如下:

  1. 导入相关的头文件:
#include <mach/mach_init.h>
#include <mach/mach_error.h>
#include <mach/task_info.h>
  1. 使用task_info函数获取当前进程的信息:
task_info_data_t info;
mach_msg_type_number_t infoCount = TASK_INFO_MAX;
task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)info, &infoCount);
  1. 计算CPU使用率:
float cpuUsage = info->cpu_usage / (float)TH_USAGE_SCALE * 100.0;
printf("Current Process CPU Usage: %.2f%%\n", cpuUsage);

结语

以上就是使用C++编程语言在Mac上获取所有进程和当前进程的CPU使用率的方法。希望本篇博客能对读者有所帮助。如有疑问,请留言给我,谢谢!

参考资料:


全部评论: 0

    我有话说: