diff options
Diffstat (limited to 'vendor/github.com/keybase')
-rw-r--r-- | vendor/github.com/keybase/go-ps/.gitignore | 1 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/.pre-commit-config.yaml | 10 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/.travis.yml | 11 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/LICENSE.md | 44 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/README.md | 31 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/appveyor.yml | 31 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/darwincgo/empty.go | 1 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/darwincgo/process_darwin.c | 87 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/darwincgo/process_darwin.go | 84 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/process.go | 75 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/process_darwin.go | 31 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/process_freebsd.go | 269 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/process_openbsd.go | 302 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/process_unix.go | 144 | ||||
-rw-r--r-- | vendor/github.com/keybase/go-ps/process_windows.go | 196 |
15 files changed, 0 insertions, 1317 deletions
diff --git a/vendor/github.com/keybase/go-ps/.gitignore b/vendor/github.com/keybase/go-ps/.gitignore deleted file mode 100644 index a977916..0000000 --- a/vendor/github.com/keybase/go-ps/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.vagrant/ diff --git a/vendor/github.com/keybase/go-ps/.pre-commit-config.yaml b/vendor/github.com/keybase/go-ps/.pre-commit-config.yaml deleted file mode 100644 index b87b62d..0000000 --- a/vendor/github.com/keybase/go-ps/.pre-commit-config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -- repo: https://github.com/gabriel/pre-commit-golang - sha: c02a81d85a5295886022b8106c367518e6c3760e - hooks: - - id: go-fmt - - id: go-metalinter - args: - - --deadline=60s - - --vendor - - --cyclo-over=20 - - --dupl-threshold=100 diff --git a/vendor/github.com/keybase/go-ps/.travis.yml b/vendor/github.com/keybase/go-ps/.travis.yml deleted file mode 100644 index f5b919d..0000000 --- a/vendor/github.com/keybase/go-ps/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: go -go: - - tip -os: - - linux - - osx -before_install: - - go get github.com/mattn/goveralls - - go get golang.org/x/tools/cmd/cover -script: - - $HOME/gopath/bin/goveralls -service=travis-ci diff --git a/vendor/github.com/keybase/go-ps/LICENSE.md b/vendor/github.com/keybase/go-ps/LICENSE.md deleted file mode 100644 index 83eb91b..0000000 --- a/vendor/github.com/keybase/go-ps/LICENSE.md +++ /dev/null @@ -1,44 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) 2015 Keybase - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/keybase/go-ps/README.md b/vendor/github.com/keybase/go-ps/README.md deleted file mode 100644 index 3d5762a..0000000 --- a/vendor/github.com/keybase/go-ps/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Process List Library for Go - -[![Build Status](https://travis-ci.org/keybase/go-ps.svg?branch=master)](https://travis-ci.org/keybase/go-ps) -[![Build Status](https://ci.appveyor.com/api/projects/status/github/keybase/go-ps?branch=master&svg=true)](https://ci.appveyor.com/project/keybase/go-ps) -[![Coverage Status](https://coveralls.io/repos/github/keybase/go-ps/badge.svg?branch=master)](https://coveralls.io/github/keybase/go-ps?branch=master) -[![GoDoc](https://godoc.org/github.com/keybase/go-ps?status.svg)](https://godoc.org/github.com/keybase/go-ps) - - -go-ps is a library for Go that implements OS-specific APIs to list and -manipulate processes in a platform-safe way. The library can find and -list processes on Linux, Mac OS X, and Windows. - -If you're new to Go, this library has a good amount of advanced Go educational -value as well. It uses some advanced features of Go: build tags, accessing -DLL methods for Windows, cgo for Darwin, etc. - -How it works: - - * **Darwin** uses `sysctl` and `proc_listpids` (for the path) to retrieve the process table, via cgo. - * **Unix** uses the procfs at `/proc` to inspect the process tree. - * **Windows** uses the Windows API, and methods such as - `CreateToolhelp32Snapshot` to get a point-in-time snapshot of - the process table. - -## Installation - -Install using standard `go get`: - -``` -$ go get github.com/keybase/go-ps -``` diff --git a/vendor/github.com/keybase/go-ps/appveyor.yml b/vendor/github.com/keybase/go-ps/appveyor.yml deleted file mode 100644 index 59a98ac..0000000 --- a/vendor/github.com/keybase/go-ps/appveyor.yml +++ /dev/null @@ -1,31 +0,0 @@ -# environment variables -environment: - global: - GOPATH: c:\work\ - -# clone path -clone_folder: c:\work\src\github.com\keybase\go-ps - -# build platform, i.e. x86, x64, Any CPU. This setting is optional. -#platform: Any CPU - -# scripts to run before build -before_build: - -# scripts to run after build -after_build: - -# to run your custom scripts instead of automatic MSBuild -build_script: - - go version - - go build - - go get github.com/stretchr/testify/assert - - go get github.com/stretchr/testify/require - - go test -short -v - - go test -short -race -v - -# to disable automatic tests -test: off - -# to disable deployment -deploy: off diff --git a/vendor/github.com/keybase/go-ps/darwincgo/empty.go b/vendor/github.com/keybase/go-ps/darwincgo/empty.go deleted file mode 100644 index bc315c6..0000000 --- a/vendor/github.com/keybase/go-ps/darwincgo/empty.go +++ /dev/null @@ -1 +0,0 @@ -package darwincgo diff --git a/vendor/github.com/keybase/go-ps/darwincgo/process_darwin.c b/vendor/github.com/keybase/go-ps/darwincgo/process_darwin.c deleted file mode 100644 index 610a8ef..0000000 --- a/vendor/github.com/keybase/go-ps/darwincgo/process_darwin.c +++ /dev/null @@ -1,87 +0,0 @@ -// +build darwin - -#include <errno.h> -#include <stdlib.h> -#include <stdio.h> -#include <strings.h> -#include <libproc.h> -#include <unistd.h> -#include <sys/sysctl.h> - -// This is declared in process_darwin.go -extern void goDarwinAppendProc(pid_t, pid_t, char *); -extern void goDarwinSetPath(pid_t, char *); - -// darwinProcesses loads the process table and calls the exported Go function to -// insert the data back into the Go space. -// -// This function is implemented in C because while it would technically -// be possible to do this all in Go, I didn't want to go spelunking through -// header files to get all the structures properly. It is much easier to just -// call it in C and be done with it. -int darwinProcesses() { - int err = 0; - int i = 0; - static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; - size_t length = 0; - struct kinfo_proc *result = NULL; - size_t resultCount = 0; - - // Get the length first - err = sysctl((int*)name, (sizeof(name) / sizeof(*name)) - 1, - NULL, &length, NULL, 0); - if (err != 0) { - goto ERREXIT; - } - - // Allocate the appropriate sized buffer to read the process list - result = malloc(length); - - // Call sysctl again with our buffer to fill it with the process list - err = sysctl((int*)name, (sizeof(name) / sizeof(*name)) - 1, - result, &length, - NULL, 0); - if (err != 0) { - goto ERREXIT; - } - - resultCount = length / sizeof(struct kinfo_proc); - for (i = 0; i < resultCount; i++) { - struct kinfo_proc *single = &result[i]; - goDarwinAppendProc( - single->kp_proc.p_pid, - single->kp_eproc.e_ppid, - single->kp_proc.p_comm); - } - -ERREXIT: - if (result != NULL) { - free(result); - } - - if (err != 0) { - return errno; - } - return 0; -} - -// darwinProcessPaths looks up paths for process pids -void darwinProcessPaths() { - int pid_buf_size = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0); - int pid_count = pid_buf_size / sizeof(pid_t); - - pid_t* pids = malloc(pid_buf_size); - bzero(pids, pid_buf_size); - - proc_listpids(PROC_ALL_PIDS, 0, pids, pid_buf_size); - char path_buffer[PROC_PIDPATHINFO_MAXSIZE]; - - for (int i=0; i < pid_count; i++) { - if (pids[i] == 0) break; - bzero(path_buffer, PROC_PIDPATHINFO_MAXSIZE); - if (proc_pidpath(pids[i], path_buffer, sizeof(path_buffer)) > 0) { - goDarwinSetPath(pids[i], path_buffer); - } - } - free(pids); -} diff --git a/vendor/github.com/keybase/go-ps/darwincgo/process_darwin.go b/vendor/github.com/keybase/go-ps/darwincgo/process_darwin.go deleted file mode 100644 index ab9edf4..0000000 --- a/vendor/github.com/keybase/go-ps/darwincgo/process_darwin.go +++ /dev/null @@ -1,84 +0,0 @@ -// +build darwin - -package darwincgo - -/* -#include <stdio.h> -#include <errno.h> -#include <libproc.h> -extern int darwinProcesses(); -extern void darwinProcessPaths(); -*/ -import "C" - -import ( - "path/filepath" - "sync" -) - -// This lock is what verifies that C calling back into Go is only -// modifying data once at a time. -var darwinLock sync.Mutex -var darwinProcsByPID map[int]*DarwinProcess - -// DarwinProcess is process definition for OS X -type DarwinProcess struct { - pid int - ppid int - path string -} - -// Pid returns process id -func (p *DarwinProcess) Pid() int { - return p.pid -} - -// PPid returns parent process id -func (p *DarwinProcess) PPid() int { - return p.ppid -} - -// Executable returns process executable name -func (p *DarwinProcess) Executable() string { - path, _ := p.Path() - return filepath.Base(path) -} - -// Path returns path to process executable -func (p *DarwinProcess) Path() (string, error) { - return p.path, nil -} - -//export goDarwinAppendProc -func goDarwinAppendProc(pid C.pid_t, ppid C.pid_t, comm *C.char) { - proc := &DarwinProcess{ - pid: int(pid), - ppid: int(ppid), - } - darwinProcsByPID[proc.pid] = proc -} - -//export goDarwinSetPath -func goDarwinSetPath(pid C.pid_t, comm *C.char) { - if proc, ok := darwinProcsByPID[int(pid)]; ok && proc != nil { - proc.path = C.GoString(comm) - } -} - -// ProcessMap returns a map of processes for the main library package. -func ProcessMap() (map[int]*DarwinProcess, error) { - darwinLock.Lock() - defer darwinLock.Unlock() - darwinProcsByPID = make(map[int]*DarwinProcess) - - // To ignore deadcode warnings for exported functions - _ = goDarwinAppendProc - _ = goDarwinSetPath - - // TODO: Investigate why darwinProcesses returns error even if process list - // succeeds - C.darwinProcesses() - C.darwinProcessPaths() - - return darwinProcsByPID, nil -} diff --git a/vendor/github.com/keybase/go-ps/process.go b/vendor/github.com/keybase/go-ps/process.go deleted file mode 100644 index 042cd1b..0000000 --- a/vendor/github.com/keybase/go-ps/process.go +++ /dev/null @@ -1,75 +0,0 @@ -// Package ps provides an API for finding and listing processes in a -// platform-agnostic way. -// -// NOTE: If you're reading these docs online via GoDocs or some other system, -// you might only see the Unix docs. This project makes heavy use of -// platform-specific implementations. We recommend reading the source if you -// are interested. -package ps - -import "fmt" - -// Process is the generic interface that is implemented on every platform -// and provides common operations for processes. -type Process interface { - // Pid is the process ID for this process. - Pid() int - - // PPid is the parent process ID for this process. - PPid() int - - // Executable name running this process. This is not a path to the - // executable. - Executable() string - - // Path is full path to the executable. The path may be unavailable if the - // exectuable was deleted from the system while it was still running. - Path() (string, error) -} - -type processesFn func() ([]Process, error) - -// Processes returns all processes. -// -// This of course will be a point-in-time snapshot of when this method was -// called. Some operating systems don't provide snapshot capability of the -// process table, in which case the process table returned might contain -// ephemeral entities that happened to be running when this was called. -func Processes() ([]Process, error) { - return processes() -} - -// FindProcess looks up a single process by pid. -// This may require a full process listing depending on the platform, so -// consider using os.FindProcess instead. -// Process will be nil and error will be nil if a matching process is not found. -func FindProcess(pid int) (Process, error) { - return findProcess(pid) -} - -type matchFn func(Process) bool - -// findProcessesWithFn finds processes using match function. -// If max is != 0, then we will return that max number of processes. -func findProcessesWithFn(processesFn processesFn, matchFn matchFn, max int) ([]Process, error) { - processes, err := processesFn() - if err != nil { - return nil, fmt.Errorf("Error listing processes: %s", err) - } - if processes == nil { - return nil, nil - } - procs := []Process{} - for _, p := range processes { - if matchFn(p) { - procs = append(procs, p) - } - if max != 0 && len(procs) >= max { - break - } - } - return procs, nil -} - -// Avoid linting error -var _ = findProcessesWithFn diff --git a/vendor/github.com/keybase/go-ps/process_darwin.go b/vendor/github.com/keybase/go-ps/process_darwin.go deleted file mode 100644 index 02cfa79..0000000 --- a/vendor/github.com/keybase/go-ps/process_darwin.go +++ /dev/null @@ -1,31 +0,0 @@ -// +build darwin - -package ps - -import ( - "github.com/keybase/go-ps/darwincgo" -) - -func findProcess(pid int) (Process, error) { - m, err := darwincgo.ProcessMap() - if err != nil { - return nil, err - } - p := m[pid] - if p == nil { - return nil, nil - } - return p, nil -} - -func processes() ([]Process, error) { - m, err := darwincgo.ProcessMap() - if err != nil { - return nil, err - } - ps := make([]Process, 0, len(m)) - for _, dp := range m { - ps = append(ps, dp) - } - return ps, nil -} diff --git a/vendor/github.com/keybase/go-ps/process_freebsd.go b/vendor/github.com/keybase/go-ps/process_freebsd.go deleted file mode 100644 index 33942c8..0000000 --- a/vendor/github.com/keybase/go-ps/process_freebsd.go +++ /dev/null @@ -1,269 +0,0 @@ -// +build freebsd,amd64 - -package ps - -import ( - "bytes" - "encoding/binary" - "fmt" - "syscall" - "unsafe" -) - -// copied from sys/sysctl.h -const ( - CTL_KERN = 1 // "high kernel": proc, limits - KERN_PROC = 14 // struct: process entries - KERN_PROC_PID = 1 // by process id - KERN_PROC_PROC = 8 // only return procs - KERN_PROC_PATHNAME = 12 // path to executable -) - -// copied from sys/user.h -type Kinfo_proc struct { - Ki_structsize int32 - Ki_layout int32 - Ki_args int64 - Ki_paddr int64 - Ki_addr int64 - Ki_tracep int64 - Ki_textvp int64 - Ki_fd int64 - Ki_vmspace int64 - Ki_wchan int64 - Ki_pid int32 - Ki_ppid int32 - Ki_pgid int32 - Ki_tpgid int32 - Ki_sid int32 - Ki_tsid int32 - Ki_jobc [2]byte - Ki_spare_short1 [2]byte - Ki_tdev int32 - Ki_siglist [16]byte - Ki_sigmask [16]byte - Ki_sigignore [16]byte - Ki_sigcatch [16]byte - Ki_uid int32 - Ki_ruid int32 - Ki_svuid int32 - Ki_rgid int32 - Ki_svgid int32 - Ki_ngroups [2]byte - Ki_spare_short2 [2]byte - Ki_groups [64]byte - Ki_size int64 - Ki_rssize int64 - Ki_swrss int64 - Ki_tsize int64 - Ki_dsize int64 - Ki_ssize int64 - Ki_xstat [2]byte - Ki_acflag [2]byte - Ki_pctcpu int32 - Ki_estcpu int32 - Ki_slptime int32 - Ki_swtime int32 - Ki_cow int32 - Ki_runtime int64 - Ki_start [16]byte - Ki_childtime [16]byte - Ki_flag int64 - Ki_kiflag int64 - Ki_traceflag int32 - Ki_stat [1]byte - Ki_nice [1]byte - Ki_lock [1]byte - Ki_rqindex [1]byte - Ki_oncpu [1]byte - Ki_lastcpu [1]byte - Ki_ocomm [17]byte - Ki_wmesg [9]byte - Ki_login [18]byte - Ki_lockname [9]byte - Ki_comm [20]byte - Ki_emul [17]byte - Ki_sparestrings [68]byte - Ki_spareints [36]byte - Ki_cr_flags int32 - Ki_jid int32 - Ki_numthreads int32 - Ki_tid int32 - Ki_pri int32 - Ki_rusage [144]byte - Ki_rusage_ch [144]byte - Ki_pcb int64 - Ki_kstack int64 - Ki_udata int64 - Ki_tdaddr int64 - Ki_spareptrs [48]byte - Ki_spareint64s [96]byte - Ki_sflag int64 - Ki_tdflags int64 -} - -// UnixProcess is an implementation of Process that contains Unix-specific -// fields and information. -type UnixProcess struct { - pid int - ppid int - state rune - pgrp int - sid int - - binary string -} - -// Pid returns process id -func (p *UnixProcess) Pid() int { - return p.pid -} - -// PPid returns parent process id -func (p *UnixProcess) PPid() int { - return p.ppid -} - -// Executable returns process executable name -func (p *UnixProcess) Executable() string { - return p.binary -} - -// Path returns path to process executable -func (p *UnixProcess) Path() (string, error) { - return "", fmt.Errorf("Unsupported") -} - -// Refresh reloads all the data associated with this process. -func (p *UnixProcess) Refresh() error { - - mib := []int32{CTL_KERN, KERN_PROC, KERN_PROC_PID, int32(p.pid)} - - buf, length, err := call_syscall(mib) - if err != nil { - return err - } - proc_k := Kinfo_proc{} - if length != uint64(unsafe.Sizeof(proc_k)) { - return err - } - - k, err := parse_kinfo_proc(buf) - if err != nil { - return err - } - - p.ppid, p.pgrp, p.sid, p.binary = copy_params(&k) - return nil -} - -func copy_params(k *Kinfo_proc) (int, int, int, string) { - n := -1 - for i, b := range k.Ki_comm { - if b == 0 { - break - } - n = i + 1 - } - comm := string(k.Ki_comm[:n]) - - return int(k.Ki_ppid), int(k.Ki_pgid), int(k.Ki_sid), comm -} - -func findProcess(pid int) (Process, error) { - mib := []int32{CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, int32(pid)} - - _, _, err := call_syscall(mib) - if err != nil { - return nil, err - } - - return newUnixProcess(pid) -} - -func processes() ([]Process, error) { - results := make([]Process, 0, 50) - - mib := []int32{CTL_KERN, KERN_PROC, KERN_PROC_PROC, 0} - buf, length, err := call_syscall(mib) - if err != nil { - return results, err - } - - // get kinfo_proc size - k := Kinfo_proc{} - procinfo_len := int(unsafe.Sizeof(k)) - count := int(length / uint64(procinfo_len)) - - // parse buf to procs - for i := 0; i < count; i++ { - b := buf[i*procinfo_len : i*procinfo_len+procinfo_len] - k, err := parse_kinfo_proc(b) - if err != nil { - continue - } - p, err := newUnixProcess(int(k.Ki_pid)) - if err != nil { - continue - } - p.ppid, p.pgrp, p.sid, p.binary = copy_params(&k) - - results = append(results, p) - } - - return results, nil -} - -func parse_kinfo_proc(buf []byte) (Kinfo_proc, error) { - var k Kinfo_proc - br := bytes.NewReader(buf) - err := binary.Read(br, binary.LittleEndian, &k) - if err != nil { - return k, err - } - - return k, nil -} - -func call_syscall(mib []int32) ([]byte, uint64, error) { - miblen := uint64(len(mib)) - - // get required buffer size - length := uint64(0) - _, _, err := syscall.RawSyscall6( - syscall.SYS___SYSCTL, - uintptr(unsafe.Pointer(&mib[0])), - uintptr(miblen), - 0, - uintptr(unsafe.Pointer(&length)), - 0, - 0) - if err != 0 { - b := make([]byte, 0) - return b, length, err - } - if length == 0 { - b := make([]byte, 0) - return b, length, err - } - // get proc info itself - buf := make([]byte, length) - _, _, err = syscall.RawSyscall6( - syscall.SYS___SYSCTL, - uintptr(unsafe.Pointer(&mib[0])), - uintptr(miblen), - uintptr(unsafe.Pointer(&buf[0])), - uintptr(unsafe.Pointer(&length)), - 0, - 0) - if err != 0 { - return buf, length, err - } - - return buf, length, nil -} - -func newUnixProcess(pid int) (*UnixProcess, error) { - p := &UnixProcess{pid: pid} - return p, p.Refresh() -} diff --git a/vendor/github.com/keybase/go-ps/process_openbsd.go b/vendor/github.com/keybase/go-ps/process_openbsd.go deleted file mode 100644 index 51c446d..0000000 --- a/vendor/github.com/keybase/go-ps/process_openbsd.go +++ /dev/null @@ -1,302 +0,0 @@ -// +build openbsd - -package ps - -import ( - "bytes" - "encoding/binary" - "fmt" - "syscall" - "unsafe" -) - -// copied from sys/sysctl.h -const ( - CTL_KERN = 1 - KERN_PROC = 66 - KERN_PROC_PID = 1 - KERN_PROC_ARGS = 55 - KERN_PROC_ARGV = 1 - KERN_PROC_ALL = 0 -) - -/* Generated via cgo: - -$ cat /tmp/gen_defs.go -// +build ignore -package ps -// #include <sys/types.h> -// #include <sys/sysctl.h> -import "C" - -type Kinfo_proc C.struct_kinfo_proc - -$ go tool cgo -godefs temp.go - -*/ - -type Kinfo_proc struct { - Ki_forw uint64 - Ki_back uint64 - Ki_paddr uint64 - Ki_addr uint64 - Ki_fd uint64 - Ki_stats uint64 - Ki_limit uint64 - Ki_vmspace uint64 - Ki_sigacts uint64 - Ki_sess uint64 - Ki_tsess uint64 - Ki_ru uint64 - Ki_eflag int32 - Ki_exitsig int32 - Ki_flag int32 - Ki_pid int32 - Ki_ppid int32 - Ki_sid int32 - Ki_x_pgid int32 - Ki_tpgid int32 - Ki_uid uint32 - Ki_ruid uint32 - Ki_gid uint32 - Ki_rgid uint32 - Ki_groups [16]uint32 - Ki_ngroups int16 - Ki_jobc int16 - Ki_tdev uint32 - Ki_estcpu uint32 - Ki_rtime_sec uint32 - Ki_rtime_usec uint32 - Ki_cpticks int32 - Ki_pctcpu uint32 - Ki_swtime uint32 - Ki_slptime uint32 - Ki_schedflags int32 - Ki_uticks uint64 - Ki_sticks uint64 - Ki_iticks uint64 - Ki_tracep uint64 - Ki_traceflag int32 - Ki_holdcnt int32 - Ki_siglist int32 - Ki_sigmask uint32 - Ki_sigignore uint32 - Ki_sigcatch uint32 - Ki_stat int8 - Ki_priority uint8 - Ki_usrpri uint8 - Ki_nice uint8 - Ki_xstat uint16 - Ki_acflag uint16 - //Ki_comm [24]int8 - Ki_comm [20]byte - Ki_wmesg [8]int8 - Ki_wchan uint64 - Ki_login [32]int8 - Ki_vm_rssize int32 - Ki_vm_tsize int32 - Ki_vm_dsize int32 - Ki_vm_ssize int32 - Ki_uvalid int64 - Ki_ustart_sec uint64 - Ki_ustart_usec uint32 - Ki_uutime_sec uint32 - Ki_uutime_usec uint32 - Ki_ustime_sec uint32 - Ki_ustime_usec uint32 - Ki_pad_cgo_0 [4]byte - Ki_uru_maxrss uint64 - Ki_uru_ixrss uint64 - Ki_uru_idrss uint64 - Ki_uru_isrss uint64 - Ki_uru_minflt uint64 - Ki_uru_majflt uint64 - Ki_uru_nswap uint64 - Ki_uru_inblock uint64 - Ki_uru_oublock uint64 - Ki_uru_msgsnd uint64 - Ki_uru_msgrcv uint64 - Ki_uru_nsignals uint64 - Ki_uru_nvcsw uint64 - Ki_uru_nivcsw uint64 - Ki_uctime_sec uint32 - Ki_uctime_usec uint32 - Ki_psflags int32 - Ki_spare int32 - Ki_svuid uint32 - Ki_svgid uint32 - Ki_emul [8]int8 - Ki_rlim_rss_cur uint64 - Ki_cpuid uint64 - Ki_vm_map_size uint64 - Ki_tid int32 - Ki_rtableid uint32 -} - -var proc_k_size = unsafe.Sizeof(Kinfo_proc{}) - -// UnixProcess is an implementation of Process that contains Unix-specific -// fields and information. -type UnixProcess struct { - pid int - ppid int - state rune - pgrp int - sid int - - binary string -} - -// Pid returns process id -func (p *UnixProcess) Pid() int { - return p.pid -} - -// PPid returns parent process id -func (p *UnixProcess) PPid() int { - return p.ppid -} - -// Executable returns process executable name -func (p *UnixProcess) Executable() string { - return p.binary -} - -// Path returns path to process executable -func (p *UnixProcess) Path() (string, error) { - // On OpenBSD we don't have the actual path of a binary, the next - // best thing we can do is walk $PATH to hopefully find the binary. - // More info here: https://github.com/kardianos/osext/commit/b4814f465fb1f92d46e37f7ef84d732ece7c3e3a - return "", fmt.Errorf("Unsupported") -} - -// Refresh reloads all the data associated with this process. -func (p *UnixProcess) Refresh() error { - mib := []int32{CTL_KERN, KERN_PROC, KERN_PROC_PID, int32(p.pid), int32(proc_k_size), 1} - - buf, length, err := call_syscall(mib) - if err != nil { - return err - } - if length != uint64(proc_k_size) { - return err - } - - k, err := parse_kinfo_proc(buf) - if err != nil { - return err - } - - p.ppid, p.pgrp, p.sid, p.binary = copy_params(&k) - return nil -} - -func copy_params(k *Kinfo_proc) (int, int, int, string) { - n := -1 - for i, b := range k.Ki_comm { - if b == 0 { - break - } - n = i + 1 - } - comm := string(k.Ki_comm[:n]) - - return int(k.Ki_ppid), int(k.Ki_x_pgid), int(k.Ki_sid), comm -} - -func findProcess(pid int) (Process, error) { - mib := []int32{CTL_KERN, KERN_PROC, KERN_PROC_PID, int32(pid), int32(proc_k_size), 1} - - _, _, err := call_syscall(mib) - if err != nil { - return nil, err - } - - return newUnixProcess(pid) -} - -func processes() ([]Process, error) { - results := make([]Process, 0, 50) - - mib := []int32{CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0, int32(proc_k_size), 400} - buf, length, err := call_syscall(mib) - if err != nil { - return results, err - } - - // get kinfo_proc size - procinfo_len := int(proc_k_size) - count := int(length / uint64(proc_k_size)) - - // parse buf to procs - for i := 0; i < count; i++ { - b := buf[i*procinfo_len : i*procinfo_len+procinfo_len] - k, err := parse_kinfo_proc(b) - if err != nil { - continue - } - p, err := newUnixProcess(int(k.Ki_pid)) - if err != nil { - continue - } - p.ppid, p.pgrp, p.sid, p.binary = copy_params(&k) - - results = append(results, p) - } - - return results, nil -} - -func parse_kinfo_proc(buf []byte) (Kinfo_proc, error) { - var k Kinfo_proc - br := bytes.NewReader(buf) - err := binary.Read(br, binary.LittleEndian, &k) - if err != nil { - return k, err - } - - return k, nil -} - -func call_syscall(mib []int32) ([]byte, uint64, error) { - miblen := uint64(len(mib)) - - // get required buffer size - length := uint64(0) - _, _, err := syscall.RawSyscall6( - syscall.SYS___SYSCTL, - uintptr(unsafe.Pointer(&mib[0])), - uintptr(miblen), - 0, - uintptr(unsafe.Pointer(&length)), - 0, - 0) - if err != 0 { - b := make([]byte, 0) - return b, length, err - } - if length == 0 { - b := make([]byte, 0) - return b, length, err - } - // get proc info itself - buf := make([]byte, length) - _, _, err = syscall.RawSyscall6( - syscall.SYS___SYSCTL, - uintptr(unsafe.Pointer(&mib[0])), - uintptr(miblen), - uintptr(unsafe.Pointer(&buf[0])), - uintptr(unsafe.Pointer(&length)), - 0, - 0) - if err != 0 { - return buf, length, err - } - - return buf, length, nil -} - -func newUnixProcess(pid int) (*UnixProcess, error) { - p := &UnixProcess{pid: pid} - return p, p.Refresh() -} diff --git a/vendor/github.com/keybase/go-ps/process_unix.go b/vendor/github.com/keybase/go-ps/process_unix.go deleted file mode 100644 index 8c89b7e..0000000 --- a/vendor/github.com/keybase/go-ps/process_unix.go +++ /dev/null @@ -1,144 +0,0 @@ -// +build linux netbsd - -package ps - -import ( - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strconv" - "strings" -) - -// UnixProcess is an implementation of Process that contains Unix-specific -// fields and information. -type UnixProcess struct { - pid int - ppid int - state rune - pgrp int - sid int - - binary string // binary name might be truncated -} - -// Pid returns process id -func (p *UnixProcess) Pid() int { - return p.pid -} - -// PPid returns parent process id -func (p *UnixProcess) PPid() int { - return p.ppid -} - -// Executable returns process executable name -func (p *UnixProcess) Executable() string { - path, err := p.Path() - if err != nil { - // Fall back to binary name which might be truncated - return p.binary - } - return filepath.Base(path) -} - -// Path returns path to process executable -func (p *UnixProcess) Path() (string, error) { - return filepath.EvalSymlinks(fmt.Sprintf("/proc/%d/exe", p.pid)) -} - -// 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 - // The name here might not be the full name - data = data[binStart+binEnd+2:] - _, err = fmt.Sscanf(data, - "%c %d %d %d", - &p.state, - &p.ppid, - &p.pgrp, - &p.sid) - - return err -} - -func findProcess(pid int) (Process, error) { - dir := fmt.Sprintf("/proc/%d", pid) - _, err := os.Stat(dir) - if err != nil { - if os.IsNotExist(err) { - return nil, nil - } - - return nil, err - } - - return newUnixProcess(pid) -} - -func processes() ([]Process, error) { - d, err := os.Open("/proc") - if err != nil { - return nil, err - } - defer d.Close() - - results := make([]Process, 0, 50) - for { - fis, err := d.Readdir(10) - if err == io.EOF { - break - } - if err != nil { - return nil, err - } - - for _, fi := range fis { - // We only care about directories, since all pids are dirs - if !fi.IsDir() { - continue - } - - // We only care if the name starts with a numeric - name := fi.Name() - if name[0] < '0' || name[0] > '9' { - continue - } - - // From this point forward, any errors we just ignore, because - // it might simply be that the process doesn't exist anymore. - pid, err := strconv.ParseInt(name, 10, 0) - if err != nil { - continue - } - - p, err := newUnixProcess(int(pid)) - if err != nil { - continue - } - - results = append(results, p) - } - } - - return results, nil -} - -func newUnixProcess(pid int) (*UnixProcess, error) { - p := &UnixProcess{pid: pid} - return p, p.Refresh() -} diff --git a/vendor/github.com/keybase/go-ps/process_windows.go b/vendor/github.com/keybase/go-ps/process_windows.go deleted file mode 100644 index e4d89e3..0000000 --- a/vendor/github.com/keybase/go-ps/process_windows.go +++ /dev/null @@ -1,196 +0,0 @@ -// +build windows - -package ps - -import ( - "fmt" - "syscall" - "unsafe" -) - -// Windows API functions -var ( - modKernel32 = syscall.NewLazyDLL("kernel32.dll") - procCloseHandle = modKernel32.NewProc("CloseHandle") - procCreateToolhelp32Snapshot = modKernel32.NewProc("CreateToolhelp32Snapshot") - procProcess32First = modKernel32.NewProc("Process32FirstW") - procProcess32Next = modKernel32.NewProc("Process32NextW") - procModule32First = modKernel32.NewProc("Module32FirstW") - procModule32Next = modKernel32.NewProc("Module32NextW") -) - -// Some constants from the Windows API -const ( - ERROR_NO_MORE_FILES = 0x12 - MAX_PATH = 260 - MAX_MODULE_NAME32 = 255 -) - -type PROCESSENTRY32 struct { - Size uint32 - CntUsage uint32 - ProcessID uint32 - DefaultHeapID uintptr - ModuleID uint32 - CntThreads uint32 - ParentProcessID uint32 - PriorityClassBase int32 - Flags uint32 - ExeFile [MAX_PATH]uint16 -} - -// WindowsProcess is an implementation of Process for Windows. -type WindowsProcess struct { - pid int - ppid int - exe string -} - -// Pid returns process id -func (p *WindowsProcess) Pid() int { - return p.pid -} - -// PPid returns parent process id -func (p *WindowsProcess) PPid() int { - return p.ppid -} - -// Executable returns process executable name -func (p *WindowsProcess) Executable() string { - return p.exe -} - -// Path returns path to process executable -func (p *WindowsProcess) Path() (string, error) { - processModules, err := modules(p.pid) - if err != nil { - return "", err - } - if len(processModules) == 0 { - return "", fmt.Errorf("No modules found for process") - } - return processModules[0].path, nil -} - -func ptrToString(c []uint16) string { - i := 0 - for { - if c[i] == 0 { - return syscall.UTF16ToString(c[:i]) - } - i++ - } -} - -func newWindowsProcess(e *PROCESSENTRY32) *WindowsProcess { - return &WindowsProcess{ - pid: int(e.ProcessID), - ppid: int(e.ParentProcessID), - exe: ptrToString(e.ExeFile[:]), - } -} - -func findProcess(pid int) (Process, error) { - return findProcessWithFn(processes, pid) -} - -func findProcessWithFn(processesFn processesFn, pid int) (Process, error) { - ps, err := processesFn() - if err != nil { - return nil, fmt.Errorf("Error listing processes: %s", err) - } - - for _, p := range ps { - if p.Pid() == pid { - return p, nil - } - } - - return nil, nil -} - -func processes() ([]Process, error) { - handle, _, _ := procCreateToolhelp32Snapshot.Call( - 0x00000002, - 0) - if handle < 0 { - return nil, syscall.GetLastError() - } - defer procCloseHandle.Call(handle) - - var entry PROCESSENTRY32 - entry.Size = uint32(unsafe.Sizeof(entry)) - ret, _, _ := procProcess32First.Call(handle, uintptr(unsafe.Pointer(&entry))) - if ret == 0 { - return nil, fmt.Errorf("Error retrieving process info.") - } - - results := make([]Process, 0, 50) - for { - results = append(results, newWindowsProcess(&entry)) - - ret, _, _ := procProcess32Next.Call(handle, uintptr(unsafe.Pointer(&entry))) - if ret == 0 { - break - } - } - - return results, nil -} - -// MODULEENTRY32 is the Windows API structure that contains a modules's -// information. -type MODULEENTRY32 struct { - Size uint32 - ModuleID uint32 - ProcessID uint32 - GlblcntUsage uint32 - ProccntUsage uint32 - ModBaseAddr *uint8 - ModBaseSize uint32 - HModule uintptr - SzModule [MAX_MODULE_NAME32 + 1]uint16 - SzExePath [MAX_PATH]uint16 -} - -type windowsModule struct { - name string - path string -} - -func newWindowsModule(e *MODULEENTRY32) windowsModule { - return windowsModule{ - name: ptrToString(e.SzModule[:]), - path: ptrToString(e.SzExePath[:]), - } -} - -func modules(pid int) ([]windowsModule, error) { - handle, _, _ := procCreateToolhelp32Snapshot.Call( - 0x00000008, // TH32CS_SNAPMODULE - uintptr(uint32(pid))) - if handle < 0 { - return nil, syscall.GetLastError() - } - defer procCloseHandle.Call(handle) - - var entry MODULEENTRY32 - entry.Size = uint32(unsafe.Sizeof(entry)) - ret, _, _ := procModule32First.Call(handle, uintptr(unsafe.Pointer(&entry))) - if ret == 0 { - return nil, fmt.Errorf("Error retrieving module info") - } - - results := make([]windowsModule, 0, 50) - for { - results = append(results, newWindowsModule(&entry)) - - ret, _, _ := procModule32Next.Call(handle, uintptr(unsafe.Pointer(&entry))) - if ret == 0 { - break - } - } - - return results, nil -} |