summaryrefslogtreecommitdiff
path: root/vendor/github.com/mitchellh/go-ps/process_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mitchellh/go-ps/process_linux.go')
-rw-r--r--vendor/github.com/mitchellh/go-ps/process_linux.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/github.com/mitchellh/go-ps/process_linux.go b/vendor/github.com/mitchellh/go-ps/process_linux.go
new file mode 100644
index 0000000..c1558f7
--- /dev/null
+++ b/vendor/github.com/mitchellh/go-ps/process_linux.go
@@ -0,0 +1,35 @@
+// +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
+}