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
 | 
						|
}
 |