60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
// +build !windows
|
|
|
|
package procstat
|
|
|
|
import (
|
|
"regexp"
|
|
|
|
"github.com/shirou/gopsutil/process"
|
|
)
|
|
|
|
//Pattern matches on the process name
|
|
func (pg *NativeFinder) Pattern(pattern string) ([]PID, error) {
|
|
var pids []PID
|
|
regxPattern, err := regexp.Compile(pattern)
|
|
if err != nil {
|
|
return pids, err
|
|
}
|
|
procs, err := process.Processes()
|
|
if err != nil {
|
|
return pids, err
|
|
}
|
|
for _, p := range procs {
|
|
name, err := p.Exe()
|
|
if err != nil {
|
|
//skip, this can be caused by the pid no longer existing
|
|
//or you having no permissions to access it
|
|
continue
|
|
}
|
|
if regxPattern.MatchString(name) {
|
|
pids = append(pids, PID(p.Pid))
|
|
}
|
|
}
|
|
return pids, err
|
|
}
|
|
|
|
//FullPattern matches on the command line when the proccess was executed
|
|
func (pg *NativeFinder) FullPattern(pattern string) ([]PID, error) {
|
|
var pids []PID
|
|
regxPattern, err := regexp.Compile(pattern)
|
|
if err != nil {
|
|
return pids, err
|
|
}
|
|
procs, err := process.Processes()
|
|
if err != nil {
|
|
return pids, err
|
|
}
|
|
for _, p := range procs {
|
|
cmd, err := p.Cmdline()
|
|
if err != nil {
|
|
//skip, this can be caused by the pid no longer existing
|
|
//or you having no permissions to access it
|
|
continue
|
|
}
|
|
if regxPattern.MatchString(cmd) {
|
|
pids = append(pids, PID(p.Pid))
|
|
}
|
|
}
|
|
return pids, err
|
|
}
|