From 245c2e9149319d308dda937292da6e769e9a6802 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Thu, 9 Mar 2017 14:02:32 +0000 Subject: [PATCH] fall back to /proc//comm for process name when proc//cmdline is empty, which is the case for some system and defunct processes. Fixes #2315 --- probe/process/walker_linux.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/probe/process/walker_linux.go b/probe/process/walker_linux.go index a46eacbae..6c7d1f09c 100644 --- a/probe/process/walker_linux.go +++ b/probe/process/walker_linux.go @@ -112,7 +112,7 @@ func (w *walker) Walk(f func(Process, Process)) error { continue } - cmdline, name := "", "(unknown)" + cmdline, name := "", "" if cmdlineBuf, err := cachedReadFile(path.Join(w.procRoot, filename, "cmdline")); err == nil { // like proc, treat name as the first element of command line i := bytes.IndexByte(cmdlineBuf, '\000') @@ -123,7 +123,13 @@ func (w *walker) Walk(f func(Process, Process)) error { cmdlineBuf = bytes.Replace(cmdlineBuf, []byte{'\000'}, []byte{' '}, -1) cmdline = string(cmdlineBuf) } - + if name == "" { + if commBuf, err := cachedReadFile(path.Join(w.procRoot, filename, "comm")); err == nil { + name = "[" + strings.TrimSpace(string(commBuf)) + "]" + } else { + name = "(unknown)" + } + } f(Process{ PID: pid, PPID: ppid,