36 lines
700 B
Go
36 lines
700 B
Go
|
// +build linux
|
||
|
|
||
|
package ps
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Refresh reloads all the data associated with this process.
|
||
|
func (p *UnixProcess) Refresh() error {
|
||
|
statPath := fmt.Sprintf("/proc/%d/stat", p.pid)
|
||
|
dataBytes, err := ioutil.ReadFile(statPath)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// First, parse out the image name
|
||
|
data := string(dataBytes)
|
||
|
binStart := strings.IndexRune(data, '(') + 1
|
||
|
binEnd := strings.IndexRune(data[binStart:], ')')
|
||
|
p.binary = data[binStart : binStart+binEnd]
|
||
|
|
||
|
// Move past the image name and start parsing the rest
|
||
|
data = data[binStart+binEnd+2:]
|
||
|
_, err = fmt.Sscanf(data,
|
||
|
"%c %d %d %d",
|
||
|
&p.state,
|
||
|
&p.ppid,
|
||
|
&p.pgrp,
|
||
|
&p.sid)
|
||
|
|
||
|
return err
|
||
|
}
|