You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeBSD下如何提取CPU使用率百分比并赋值到变量?

在FreeBSD中获取CPU使用率并赋值给变量的几种方法

在FreeBSD上要把CPU使用率提取出来存到变量里?这几个方案我日常写脚本时经常用,每种都有适用场景,你可以按需挑选:

方法1:用top命令直接提取(直观易读)

top是大家最熟悉的系统监控工具,在FreeBSD里可以用批处理模式输出,再通过文本处理工具精准提取数值:

# 提取总CPU使用率并赋值给cpu_usage变量(去掉百分号,只留纯数字)
cpu_usage=$(top -b -n 1 | awk '/^CPU:/ {print $2}' | sed 's/%//')

# 验证变量内容
echo "当前CPU使用率:${cpu_usage}%"

细节说明:

  • top -b:启用批处理模式,不需要交互界面,完美适配脚本调用场景
  • top -n 1:只输出一次统计结果,避免持续输出占用资源
  • awk '/^CPU:/ {print $2}':匹配以CPU:开头的行,直接提取第二个字段(带百分号的使用率数值)
  • sed 's/%//':去掉百分号,让变量里存的是纯数字,方便后续做算术运算

方法2:用vmstat计算(轻量高效,适合脚本)

如果觉得top资源占用偏高,vmstat是更轻量的选择,它输出的空闲CPU百分比可以直接用来反向计算使用率:

# 获取空闲CPU百分比(取第二次输出结果,避免初始值偏差)
cpu_idle=$(vmstat 1 2 | tail -n 1 | awk '{print $13}')

# 计算使用率并赋值(100%减去空闲率)
cpu_usage=$((100 - cpu_idle))

# 打印结果
echo "当前CPU使用率:${cpu_usage}%"

细节说明:

  • vmstat 1 2:每隔1秒输出一次系统状态,共输出2次;取第二次结果是因为第一次输出多为系统启动以来的平均数值,不够实时
  • awk '{print $13}':FreeBSD的vmstat输出中,第13列对应空闲CPU的百分比
  • $((100 - cpu_idle)):用Shell内置的算术运算直接算出使用率,得到纯数字变量

方法3:通过sysctl底层统计计算(精准可靠)

如果需要最精准的CPU使用率统计,可以直接读取系统内核的CPU时间数据,通过比例计算得到使用率:

# 读取内核CPU时间统计数据,分别存入对应变量
read user nice system interrupt idle <<< $(sysctl -n kern.cp_time)

# 计算总CPU时间(所有状态的时间总和)
total_cpu_time=$((user + nice + system + interrupt + idle))

# 计算使用率((总时间-空闲时间)/总时间*100,保留整数)
cpu_usage=$(( (total_cpu_time - idle) * 100 / total_cpu_time ))

# 查看结果
echo "当前CPU使用率:${cpu_usage}%"

细节说明:

  • sysctl -n kern.cp_time:输出内核统计的CPU时间,包含5个数值:用户态时间、nice优先级进程时间、系统态时间、中断时间、空闲时间
  • 把这5个数值分别读入变量后,计算总时间,再通过比例算出使用率,这种方法直接从内核获取原始数据,准确性最高,适合长期监控的脚本

小拓展:实时监控

如果需要持续监控CPU使用率,可以把上述代码放到while循环里,比如:

while true; do
    cpu_usage=$(top -b -n 1 | awk '/^CPU:/ {print $2}' | sed 's/%//')
    echo "当前CPU使用率:${cpu_usage}%"
    sleep 5
done

内容的提问来源于stack exchange,提问作者Sebastián Alegría

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:36:26