|
- package sys
-
- import (
- "fmt"
- "strconv"
- "strings"
-
- "github.com/toolkits/pkg/file"
- )
-
- func PidsByCmdline(cmdline string) []int {
- ret := []int{}
-
- var dirs []string
- dirs, err := file.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 !file.IsExist(cmdlineFile) {
- continue
- }
-
- cmdlineBytes, err := file.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
- }
|