Go语言在Linux下获取系统进程CPU使用率的方法

月亮慢半拍
月亮慢半拍
发布时间:2026-10-14| 5人浏览过
原创

介绍如何利用Go语言的执行命令包调用Linux `ps` 工具,解析其输出以获取当前系统各进程的CPU占用百分比。

原理与目标

在Linux环境下,获取进程资源占用情况最直接的方式是借助现有的系统命令行工具。本文将演示如何使用Go语言的 os/exec 包执行 ps aux 命令,捕获其控制台输出,并通过字符串分割逻辑解析出每个进程的PID(进程ID)及其对应的CPU使用率百分比。

准备条件

  • 操作系统:Linux(支持 ps 命令的系统)。
  • 开发环境:已安装Go编译器。
  • 权限:执行该脚本的用户需要具有查看系统进程列表的权限。

第1步:定义数据结构

为了清晰地存储从系统获取的数据,首先定义一个表示进程信息的结构体,包含进程ID和CPU使用率两个字段:

type Process struct {
	pid int
	cpu float64
}

第2步:执行系统命令

使用 exec.Command 创建运行 ps aux 的指令实例,并绑定一个缓冲区域用于接收标准输出:

cmd := exec.Command("ps", "aux")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
	log.Fatal(err)
}

第3步:解析进程数据

逐行读取缓冲区的输出内容。针对每一行,通过分隔符拆分子项,去除空字符后,提取关键列:

  1. PID:通常位于数组的第二列(索引1),需转换为整型。
  2. CPU%:通常位于数组的第三列(索引2),需转换为浮点型。
processes := make([]*Process, 0)
for {
	line, err := out.ReadString('\n')
	if err!=nil {
		break
	}
	tokens := strings.Split(line, " ")
	ft := make([]string, 0)
	for _, t := range(tokens) {
		if t!="" && t!="\t" {
			ft = append(ft, t)
		}
	}

	// 跳过标题行或非预期格式行
	if len(ft) < 3 {
		continue
	}

	pid, err := strconv.Atoi(ft[1])
	if err!=nil {
		continue // 若PID解析失败则跳过该行
	}
	cpu, err := strconv.ParseFloat(ft[2], 64)
	if err!=nil {
		log.Printf("CPU parse error: %v", err)
		continue
	}
	processes = append(processes, &Process{pid, cpu})
}

第4步:输出结果

遍历收集到的进程列表,将结果打印到日志或控制台,以供后续分析或监控使用:

for _, p := range(processes) {
	log.Println("Process", p.pid, "takes", p.cpu, "% of the CPU")
}

注意事项与排错

  • 并发与延迟:ps aux 展示的是某一瞬间的状态快照,并非连续监测。如需实时数据,建议在循环中配合时间间隔调用此方法。
  • 解析差异:不同版本的Linux或不同的 locale 设置可能会导致 ps 输出的列宽和顺序略有变化,生产环境中建议确认实际输出的列序索引。
  • 性能消耗:频繁调用外部命令会有一定开销,对于大规模高频率监控场景,建议直接解析 /proc/[pid]/stat 文件或使用专门的系统监控库(如 gopsutil)。

总结

上述方法提供了一种简单直接的途径,在不引入第三方依赖的情况下,利用Go语言的标准库功能在Linux系统中抓取进程CPU占用信息。以上就是在Linux下通过Go语言获得系统进程cpu使用情况的详细内容,更多关于Go语言系统监控的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。