1、 Linux
Linux 上,可以使用 /proc
文件系统,该文件系统提供了关于进程的很多信息。可以查看 /proc/[pid]/stat
和 /proc/[pid]/status
文件来获取 CPU 和内存使用情况。
1)获取 CPU 使用情况
CPU 使用情况可以通过读取 /proc/[pid]/stat
文件来推算。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <string.h> long get_cpu_time(int pid) { char filename[256]; snprintf(filename, sizeof(filename), "/proc/%d/stat", pid); FILE *fp = fopen(filename, "r"); if (!fp) { perror("fopen"); return -1; } long utime, stime; int pid_read; char comm[256]; fscanf(fp, "%d %s %*c %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %ld %ld", &pid_read, comm, &utime, &stime); fclose(fp); return utime + stime; } int main() { pid_t pid = getpid(); long cpu_time = get_cpu_time(pid); printf("CPU 时间:%ld\n", cpu_time); return 0; }
2)获取内存使用情况
内存使用情况可以通过 /proc/[pid]/status
文件获取,其中包含了多种内存统计信息。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> long get_memory_usage(int pid) { char filename[256]; snprintf(filename, sizeof(filename), "/proc/%d/status", pid); FILE *fp = fopen(filename, "r"); if (!fp) { perror("fopen"); return -1; } long vmrss = 0; char line[256]; while (fgets(line, sizeof(line), fp)) { if (strncmp(line, "VmRSS:", 6) == 0) { sscanf(line, "VmRSS: %ld kB", &vmrss); break; } } fclose(fp); return vmrss; } int main() { pid_t pid = getpid(); long memory_usage = get_memory_usage(pid); printf("进程的内存使用情况:%ld kB\n", memory_usage); return 0; }
2、Windows
Windows 上,你可以使用 Windows API 来查询内存和 CPU 使用情况。具体来说,可以使用 GetProcessTimes()
来获取 CPU 使用情况,使用 GetProcessMemoryInfo()
来获取内存使用情况。
1)获取 CPU 使用情况
可以使用 GetProcessTimes()
来获取进程在用户模式和内核模式下的时间。
#include <windows.h> #include <stdio.h> void get_cpu_usage(HANDLE process) { FILETIME creationTime, exitTime, kernelTime, userTime; if (GetProcessTimes(process, &creationTime, &exitTime, &kernelTime, &userTime)) { ULONGLONG kernel_ticks = *((ULONGLONG*)&kernelTime); ULONGLONG user_ticks = *((ULONGLONG*)&userTime); printf("内核时间:%llu, 用户时间:%llu\n", kernel_ticks, user_ticks); } } int main() { HANDLE process = GetCurrentProcess(); get_cpu_usage(process); return 0; }
2)获取内存使用情况
可以使用 GetProcessMemoryInfo()
函数来获取进程的内存使用情况,需要包含 Psapi.h
库。
#include <windows.h> #include <psapi.h> #include <stdio.h> void get_memory_usage(HANDLE process) { PROCESS_MEMORY_COUNTERS pmc; if (GetProcessMemoryInfo(process, &pmc, sizeof(pmc))) { printf("工作集大小:%zu 字节\n", pmc.WorkingSetSize); } } int main() { HANDLE process = GetCurrentProcess(); get_memory_usage(process); return 0; }