【Golang】探索进程资源监控的精妙细节:利用Gopsutil/Process实现高级进程性能和资源信息监控
package main
import (
"fmt"
"github.com/shirou/gopsutil/process"
"time"
)
func main() {
// 监控进程ID为1234的进程
const pid = 1234
for {
p, err := process.NewProcess(pid)
if err != nil {
fmt.Printf("无法监控进程ID %d: %s\n", pid, err)
time.Sleep(10 * time.Second)
continue
}
// 获取进程的CPU使用情况
cpuPercent, err := p.CPUPercent(time.Second)
if err != nil {
fmt.Printf("无法获取进程ID %d的CPU使用率: %s\n", pid, err)
continue
}
fmt.Printf("进程ID %d的CPU使用率: %.2f%%\n", pid, cpuPercent)
// 获取进程的内存使用情况
mem, err := p.MemoryInfo()
if err != nil {
fmt.Printf("无法获取进程ID %d的内存使用信息: %s\n", pid, err)
continue
}
fmt.Printf("进程ID %d的内存使用量: %.2fMB\n", pid, float64(mem.RSS)/1024/1024)
// 检查进程是否仍然运行
if stillRunning, err := p.Pid(); err != nil {
fmt.Printf("无法获取进程ID %d的运行状态: %s\n", pid, err)
} else if stillRunning == 0 {
fmt.Printf("进程ID %d已经不再运行\n", pid)
break
}
// 每10秒钟进行一次监控
time.Sleep(10 * time.Second)
}
}
这段代码使用了gopsutil
库来监控一个特定进程的CPU和内存使用情况。它会持续不断地检查这个进程是否还在运行,并输出其CPU使用率和内存使用量。如果进程不再运行,它会退出监控循环。这是一个简单的进程监控示例,展示了如何使用Go语言和gopsutil
库来进行系统监控。
评论已关闭