pet-house/core/helper/sys/proc.go

56 lines
895 B
Go

package sys
import (
"fmt"
"strconv"
"strings"
"pet-house.com/core/helper/dir"
)
func PidsByCmdline(cmdline string) []int {
ret := []int{}
var dirs []string
dirs, err := dir.DirsUnder("/proc")
if err != nil {
return ret
}
count := len(dirs)
for i := 0; i < count; i++ {
pid, err := strconv.Atoi(dirs[i])
if err != nil {
continue
}
cmdlineFile := fmt.Sprintf("/proc/%d/cmdline", pid)
if !dir.IsExist(cmdlineFile) {
continue
}
cmdlineBytes, err := dir.ReadBytes(cmdlineFile)
if err != nil {
continue
}
cmdlineBytesLen := len(cmdlineBytes)
if cmdlineBytesLen == 0 {
continue
}
noNut := make([]byte, 0, cmdlineBytesLen)
for j := 0; j < cmdlineBytesLen; j++ {
if cmdlineBytes[j] != 0 {
noNut = append(noNut, cmdlineBytes[j])
}
}
if strings.Contains(string(noNut), cmdline) {
ret = append(ret, pid)
}
}
return ret
}