Vendor psutils and remove neko
This commit is contained in:
102
plugins/system/ps/process/process_posix.go
Normal file
102
plugins/system/ps/process/process_posix.go
Normal file
@@ -0,0 +1,102 @@
|
||||
// +build linux freebsd darwin
|
||||
|
||||
package process
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// POSIX
|
||||
func getTerminalMap() (map[uint64]string, error) {
|
||||
ret := make(map[uint64]string)
|
||||
var termfiles []string
|
||||
|
||||
d, err := os.Open("/dev")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer d.Close()
|
||||
|
||||
devnames, err := d.Readdirnames(-1)
|
||||
for _, devname := range devnames {
|
||||
if strings.HasPrefix(devname, "/dev/tty") {
|
||||
termfiles = append(termfiles, "/dev/tty/"+devname)
|
||||
}
|
||||
}
|
||||
|
||||
ptsd, err := os.Open("/dev/pts")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer ptsd.Close()
|
||||
|
||||
ptsnames, err := ptsd.Readdirnames(-1)
|
||||
for _, ptsname := range ptsnames {
|
||||
termfiles = append(termfiles, "/dev/pts/"+ptsname)
|
||||
}
|
||||
|
||||
for _, name := range termfiles {
|
||||
stat := syscall.Stat_t{}
|
||||
if err = syscall.Stat(name, &stat); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rdev := uint64(stat.Rdev)
|
||||
ret[rdev] = strings.Replace(name, "/dev", "", -1)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (p *Process) SendSignal(sig syscall.Signal) error {
|
||||
sigAsStr := "INT"
|
||||
switch sig {
|
||||
case syscall.SIGSTOP:
|
||||
sigAsStr = "STOP"
|
||||
case syscall.SIGCONT:
|
||||
sigAsStr = "CONT"
|
||||
case syscall.SIGTERM:
|
||||
sigAsStr = "TERM"
|
||||
case syscall.SIGKILL:
|
||||
sigAsStr = "KILL"
|
||||
}
|
||||
|
||||
cmd := exec.Command("kill", "-s", sigAsStr, strconv.Itoa(int(p.Pid)))
|
||||
cmd.Stderr = os.Stderr
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Process) Suspend() error {
|
||||
return p.SendSignal(syscall.SIGSTOP)
|
||||
}
|
||||
func (p *Process) Resume() error {
|
||||
return p.SendSignal(syscall.SIGCONT)
|
||||
}
|
||||
func (p *Process) Terminate() error {
|
||||
return p.SendSignal(syscall.SIGTERM)
|
||||
}
|
||||
func (p *Process) Kill() error {
|
||||
return p.SendSignal(syscall.SIGKILL)
|
||||
}
|
||||
func (p *Process) Username() (string, error) {
|
||||
uids, err := p.Uids()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(uids) > 0 {
|
||||
u, err := user.LookupId(strconv.Itoa(int(uids[0])))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return u.Username, nil
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
Reference in New Issue
Block a user