Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
Dan Ballard | 0b9266ba83 | |
David 大伟 | f39c7cf5e2 | |
xNevo | 8d5783c9c4 | |
David 大伟 | beb3d83057 | |
David 大伟 | 8b46c6a37a | |
David 大伟 | d654f15dd0 | |
David 大伟 | f84800df51 |
13
pidusage.go
13
pidusage.go
|
@ -9,6 +9,7 @@ import (
|
|||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// SysInfo will record cpu and memory data
|
||||
|
@ -17,7 +18,7 @@ type SysInfo struct {
|
|||
Memory float64
|
||||
}
|
||||
|
||||
// Stat will store CUP time struct
|
||||
// Stat will store CPU time struct
|
||||
type Stat struct {
|
||||
utime float64
|
||||
stime float64
|
||||
|
@ -33,6 +34,7 @@ type fn func(int) (*SysInfo, error)
|
|||
var fnMap map[string]fn
|
||||
var platform string
|
||||
var history map[int]Stat
|
||||
var historyLock sync.Mutex
|
||||
var eol string
|
||||
|
||||
func wrapper(statType string) func(pid int) (*SysInfo, error) {
|
||||
|
@ -42,8 +44,7 @@ func wrapper(statType string) func(pid int) (*SysInfo, error) {
|
|||
}
|
||||
func init() {
|
||||
platform = runtime.GOOS
|
||||
eol = "\n"
|
||||
if strings.Index(platform, "win") == 0 {
|
||||
if eol = "\n"; strings.Index(platform, "win") == 0 {
|
||||
platform = "win"
|
||||
eol = "\r\n"
|
||||
}
|
||||
|
@ -79,7 +80,7 @@ func stat(pid int, statType string) (*SysInfo, error) {
|
|||
stdout, _ := exec.Command("ps", args, strconv.Itoa(pid)).Output()
|
||||
ret := formatStdOut(stdout, 1)
|
||||
if len(ret) == 0 {
|
||||
return sysInfo, errors.New("can not foud this pid: " + strconv.Itoa(pid))
|
||||
return sysInfo, errors.New("Can't find process with this PID: " + strconv.Itoa(pid))
|
||||
}
|
||||
sysInfo.CPU = parseFloat(ret[0])
|
||||
sysInfo.Memory = parseFloat(ret[1]) * 1024
|
||||
|
@ -105,7 +106,7 @@ func stat(pid int, statType string) (*SysInfo, error) {
|
|||
splitAfter := strings.SplitAfter(string(procStatFileBytes), ")")
|
||||
|
||||
if len(splitAfter) == 0 || len(splitAfter) == 1 {
|
||||
return sysInfo, errors.New("can not foud this pid: " + strconv.Itoa(pid))
|
||||
return sysInfo, errors.New("Can't find process with this PID: " + strconv.Itoa(pid))
|
||||
}
|
||||
infos := strings.Split(splitAfter[1], " ")
|
||||
stat := &Stat{
|
||||
|
@ -140,7 +141,9 @@ func stat(pid int, statType string) (*SysInfo, error) {
|
|||
seconds = 1
|
||||
}
|
||||
|
||||
historyLock.Lock()
|
||||
history[pid] = *stat
|
||||
historyLock.Unlock()
|
||||
sysInfo.CPU = (total / seconds) * 100
|
||||
sysInfo.Memory = stat.rss * pageSize
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue