From c66f6bc5a9a58fbdb9f489d90e6a63b69c6d3a30 Mon Sep 17 00:00:00 2001 From: Babak Farrokhi Date: Wed, 8 May 2019 13:39:08 +0200 Subject: [PATCH] Display variance for user and system counters --- goprocstat.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/goprocstat.go b/goprocstat.go index 94c7986..ab8fd61 100644 --- a/goprocstat.go +++ b/goprocstat.go @@ -4,12 +4,13 @@ import ( "flag" "fmt" "github.com/shirou/gopsutil/process" - "os" "time" ) func main() { + var currUser, prevUser, currSystem, prevSystem, cpuUsage float64 + flagPID := flag.Int("p", 1, "PID for process to monitor") flagNUM := flag.Int("n", -1, "Stop after n times of displaying stat") flag.Parse() @@ -18,16 +19,26 @@ func main() { name, _ := p.Name() cnt := 0 - for { + v, _ := p.Times() + currUser = v.User + currSystem = v.System + + for !(*flagNUM >= 0 && cnt >= *flagNUM) { + v, err := p.Times() - if *flagNUM >= 0 && cnt >= *flagNUM { - os.Exit(0) - } if err == nil { - cpuUsage, _ := p.CPUPercent() - fmt.Printf("%d %s cpu: %5.2f%% user: %5.2f system: %5.2f iowait: %5.2f irq: %5.2f softirq: %5.2f\n", - time.Now().Unix(), name, cpuUsage, v.User, v.System, v.Iowait, v.Irq, v.Softirq) + // keep old counters, needed to calculated variance + prevUser = currUser + prevSystem = currSystem + + currUser = v.User + currSystem = v.System + + cpuUsage, _ = p.CPUPercent() + + fmt.Printf("%d %s cpu: %5.2f%% user: %5.2f (%+5.2f) system: %5.2f (%+5.2f) iowait: %5.2f irq: %5.2f softirq: %5.2f\n", + time.Now().Unix(), name, cpuUsage, currUser, currUser-prevUser, currSystem, currSystem-prevSystem, v.Iowait, v.Irq, v.Softirq) } else { fmt.Println(err) }