From e8f57e1578e1ec748e68ceab8460c106271e1573 Mon Sep 17 00:00:00 2001 From: Nex Date: Thu, 16 Mar 2017 17:50:16 +0100 Subject: [PATCH] Added first function FindProcsByFile --- files/files.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 files/files.go diff --git a/files/files.go b/files/files.go new file mode 100644 index 0000000..d640ac4 --- /dev/null +++ b/files/files.go @@ -0,0 +1,53 @@ +package files + +import ( + "os" + "os/exec" + "strings" + "github.com/shirou/gopsutil/internal/common" +) + +func FindProcsByFile(file_path string) []int { + if _, err := os.Stat(file_path); err != nil { + return []int, err + } + + lsof_bin, err := exec.LookPath("lsof") + if err != nil { + return []int, err + } + + grep_bin, err := exec.LookPath("grep") + if err != nil { + return []int, err + } + + awk_bin, err := exec.LookPath("awk") + if err != nil { + return []int, err + } + + sort_bin, err := exec.LookPath("sort") + if err != nil { + return []int, err + } + + lsof := exec.Command(lsof_bin, file_path) + grep := exec.Command(grep, "-V", "COMMAND") + awk := exec.Command(awk_bin, "{print $2}") + sort := exec.Command(sort_bin, "-u") + + output, _, err := common.Pipeline(lsof, grep, awk, sort) + if err != nil { + return []int, err + } + + pids := strings.Split(output, "\n") + ret := []int + for _, pid := range pids { + if pid != "" { + ret = append(pids, int(pid)) + } + } + return ret, nil +}