使用c语言编译一个程序,监控Linux系统下的监控每个cpu的使用率情况
时间: 2024-09-10 08:11:49 浏览: 76
在C语言中编写一个程序来监控Linux系统的CPU使用率通常需要使用到`<stdio.h>`、`<stdlib.h>`、`<time.h>`等标准库,并结合系统调用如`sysconf()`和`getrusage()`。以下是一个简单的示例,展示了如何获取和打印每个CPU核心的使用率:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
void get_cpu_usage(double *cpu_user, double *cpu_system) {
struct rusage usage;
if (getrusage(RUSAGE_SELF, &usage) != 0) {
perror("Error getting resource usage");
return;
}
*cpu_user = usage.ru_utime.tv_sec + usage.ru_utime.tv_usec / 1000000.0; // 用户时间
*cpu_system = usage.ru_stime.tv_sec + usage.ru_stime.tv_usec / 1000000.0; // 系统时间
// Linux内核将总CPU时间分为用户时间和系统时间,加起来就是CPU占用率的一个近似值
*cpu_user += *cpu_system;
}
int main() {
double cpu_user[2], cpu_system[2]; // 存储每个CPU的用户时间和系统时间
int num_cpus;
num_cpus = sysconf(_SC_NPROCESSORS_ONLN); // 获取在线处理器数目
for (int i = 0; i < num_cpus; ++i) {
get_cpu_usage(&cpu_user[i], &cpu_system[i]);
printf("CPU %d User Time: %.2f%%, System Time: %.2f%%\n", i+1, cpu_user[i]*100, cpu_system[i]*100);
}
return 0;
}
```
这个程序会循环遍历所有CPU核心并显示每核心的用户时间和系统时间百分比。注意,这只是一个基础的示例,实际应用中可能会更复杂,比如使用线程池来定期更新数据,或者使用更专业的库如`librt`。
阅读全文