Initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user