github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/util/proc_unix.go (about) 1 // +build darwin linux 2 3 package util 4 5 import ( 6 "bytes" 7 "fmt" 8 "io" 9 "os/exec" 10 "strings" 11 ) 12 13 func isProcessExists(pid int) bool { 14 ptn := fmt.Sprintf(`^\s*%d$`, pid) 15 16 pgrepCmd := exec.Command("ps", "-eo", "pid") 17 grepCmd := exec.Command("grep", ptn) 18 wcCmd := exec.Command("wc", "-l") 19 20 r1, w1 := io.Pipe() 21 pgrepCmd.Stdout = w1 22 grepCmd.Stdin = r1 23 24 r2, w2 := io.Pipe() 25 grepCmd.Stdout = w2 26 wcCmd.Stdin = r2 27 28 b := new(bytes.Buffer) 29 wcCmd.Stdout = b 30 31 if err := pgrepCmd.Start(); err != nil { 32 panic(err) 33 } 34 if err := grepCmd.Start(); err != nil { 35 panic(err) 36 } 37 if err := wcCmd.Start(); err != nil { 38 panic(err) 39 } 40 pgrepCmd.Wait() 41 w1.Close() 42 grepCmd.Wait() 43 w2.Close() 44 wcCmd.Wait() 45 46 s := strings.Trim(b.String(), " \t\r\n") 47 if s == "0" { 48 return false 49 } 50 return true 51 }