From 218c61a1d34dafa566b1184790c921d0dd4b56bf Mon Sep 17 00:00:00 2001 From: Jaana Burcu Dogan Date: Thu, 19 Jan 2017 18:37:32 -0800 Subject: [PATCH] gops: Stat pidfile to determine if agent is working Fixes #27. --- internal/internal.go | 11 +++++++++-- main.go | 16 +++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/internal/internal.go b/internal/internal.go index b1e5b83c..13828220 100644 --- a/internal/internal.go +++ b/internal/internal.go @@ -30,12 +30,19 @@ func guessUnixHomeDir() string { return os.Getenv("HOME") } -func GetPort(pid int) (string, error) { +func PIDFile(pid int) (string, error) { gopsdir, err := ConfigDir() if err != nil { return "", err } - portfile := fmt.Sprintf("%s/%d", gopsdir, pid) + return fmt.Sprintf("%s/%d", gopsdir, pid), nil +} + +func GetPort(pid int) (string, error) { + portfile, err := PIDFile(pid) + if err != nil { + return "", err + } b, err := ioutil.ReadFile(portfile) if err != nil { return "", err diff --git a/main.go b/main.go index 2c0ee46b..c8028c5a 100644 --- a/main.go +++ b/main.go @@ -11,9 +11,9 @@ import ( "log" "os" "strconv" - "strings" "sync" + "github.com/google/gops/internal" "github.com/google/gops/internal/objfile" ps "github.com/keybase/go-ps" ) @@ -113,17 +113,19 @@ func printIfGo(pr ps.Process) { } var ok bool - var agent bool - // TODO(jbd): find a faster way to determine Go programs. for _, s := range symbols { if s.Name == "runtime.buildVersion" { ok = true } - // TODO(jbd): Stat the pid file to determine if the agent is still working. - if strings.HasPrefix(s.Name, "github.com/google/gops/agent") { - agent = true - } } + + var agent bool + pidfile, err := internal.PIDFile(pr.Pid()) + if err == nil { + _, err := os.Stat(pidfile) + agent = err == nil + } + if ok { buf := bytes.NewBuffer(nil) fmt.Fprintf(buf, "%d", pr.Pid())