sysinfo系统调用会在linux上返回错误的加载平均值

我有一个打印一些系统统计的C程序。

#include <sys/sysinfo.h> #include <stdio.h> int main() { int days, hours, mins; struct sysinfo sys_info; if(sysinfo(&sys_info) != 0) perror("sysinfo"); // Uptime days = sys_info.uptime / 86400; hours = (sys_info.uptime / 3600) - (days * 24); mins = (sys_info.uptime / 60) - (days * 1440) - (hours * 60); printf("Uptime: %ddays, %dhours, %dminutes, %ldseconds\n", days, hours, mins, sys_info.uptime % 60); // Load Averages for 1,5 and 15 minutes printf("Load Avgs: 1min(%ld) 5min(%ld) 15min(%ld)\n", sys_info.loads[0], sys_info.loads[1], sys_info.loads[2]); printf("Total Ram: %lluk\tFree: %lluk\n", sys_info.totalram *(unsigned long long)sys_info.mem_unit / 1024, sys_info.freeram *(unsigned long long)sys_info.mem_unit/ 1024); // Number of processes currently running. printf("Number of processes: %d\n", sys_info.procs); return 0; } 

我的问题是,负载平均值不同于/ proc / loadavg

 ./a.out Uptime: 1days, 4hours, 1minutes, 16seconds Load Avgs: 1min(13248) 5min(14880) 15min(11840) Total Ram: 2052956k Free: 188104k Number of processes: 265 

为什么? 我打印13248,但“顶部”或“猫/ proc / loadavg”给0.24。 问题是什么?

Solutions Collecting From Web of "sysinfo系统调用会在linux上返回错误的加载平均值"

该调用不返回“错误”的值。 请注意,该类型是整数,因此它不能用于返回由正常运行时间打印的浮点数。

请参阅此主题以了解如何解释返回的值以及如何转换为更熟悉的浮动。

我的猜测(在阅读链接之前)是,它只是被放大了65,535(2 16 ),这似乎也是他们发现的。 所以除以65536.0,或者更干净(正如在注释中指出的那样)使用SI_LOAD_SHIFT常量并除以(float)(1 << SI_LOAD_SHIFT)