portlist: report a better process name for .Net on linux.

Fixes #1440.

Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
David Anderson
2021-03-03 19:00:41 -08:00
committed by Dave Anderson
parent ffa70a617d
commit ad6edf5ecd
4 changed files with 82 additions and 11 deletions

34
portlist/clean.go Normal file
View File

@@ -0,0 +1,34 @@
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package portlist
import (
"path/filepath"
"strings"
)
// argvSubject takes a command and its flags, and returns the
// short/pretty name for the process. This is usually the basename of
// the binary being executed, but can sometimes vary (e.g. so that we
// don't report all Java programs as "java").
func argvSubject(argv ...string) string {
if len(argv) == 0 {
return ""
}
ret := filepath.Base(argv[0])
// Handle special cases.
switch {
case ret == "mono" && len(argv) >= 2:
// .Net programs execute as `mono actualProgram.exe`.
ret = filepath.Base(argv[1])
}
// Remove common noise.
ret = strings.TrimSpace(ret)
ret = strings.TrimSuffix(ret, ".exe")
return ret
}