Skip to content

Commit d0bce33

Browse files
committed
fix: suppress benign errors when listing processes (#14660)
1 parent 9332d15 commit d0bce33

File tree

2 files changed

+38
-31
lines changed

2 files changed

+38
-31
lines changed

agent/agent.go

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,16 +1669,12 @@ func (a *agent) manageProcessPriority(ctx context.Context, debouncer *logDebounc
16691669
}
16701670

16711671
score, niceErr := proc.Niceness(a.syscaller)
1672-
if niceErr != nil && !xerrors.Is(niceErr, os.ErrPermission) {
1673-
if !isNoSuchProcessErr(niceErr) {
1674-
debouncer.Warn(ctx, "unable to get proc niceness",
1675-
slog.F("cmd", proc.Cmd()),
1676-
slog.F("pid", proc.PID),
1677-
slog.Error(niceErr),
1678-
)
1679-
}
1680-
1681-
continue
1672+
if !isBenignProcessErr(niceErr) {
1673+
debouncer.Warn(ctx, "unable to get proc niceness",
1674+
slog.F("cmd", proc.Cmd()),
1675+
slog.F("pid", proc.PID),
1676+
slog.Error(niceErr),
1677+
)
16821678
}
16831679

16841680
// We only want processes that don't have a nice value set
@@ -1692,31 +1688,27 @@ func (a *agent) manageProcessPriority(ctx context.Context, debouncer *logDebounc
16921688

16931689
if niceErr == nil {
16941690
err := proc.SetNiceness(a.syscaller, niceness)
1695-
if err != nil && !xerrors.Is(err, os.ErrPermission) {
1696-
if !isNoSuchProcessErr(err) {
1697-
debouncer.Warn(ctx, "unable to set proc niceness",
1698-
slog.F("cmd", proc.Cmd()),
1699-
slog.F("pid", proc.PID),
1700-
slog.F("niceness", niceness),
1701-
slog.Error(err),
1702-
)
1703-
}
1691+
if !isBenignProcessErr(err) {
1692+
debouncer.Warn(ctx, "unable to set proc niceness",
1693+
slog.F("cmd", proc.Cmd()),
1694+
slog.F("pid", proc.PID),
1695+
slog.F("niceness", niceness),
1696+
slog.Error(err),
1697+
)
17041698
}
17051699
}
17061700

17071701
// If the oom score is valid and it's not already set and isn't a custom value set by another process then it's ok to update it.
17081702
if oomScore != unsetOOMScore && oomScore != proc.OOMScoreAdj && !isCustomOOMScore(agentScore, proc) {
17091703
oomScoreStr := strconv.Itoa(oomScore)
17101704
err := afero.WriteFile(a.filesystem, fmt.Sprintf("/proc/%d/oom_score_adj", proc.PID), []byte(oomScoreStr), 0o644)
1711-
if err != nil && !xerrors.Is(err, os.ErrPermission) {
1712-
if !isNoSuchProcessErr(err) {
1713-
debouncer.Warn(ctx, "unable to set oom_score_adj",
1714-
slog.F("cmd", proc.Cmd()),
1715-
slog.F("pid", proc.PID),
1716-
slog.F("score", oomScoreStr),
1717-
slog.Error(err),
1718-
)
1719-
}
1705+
if !isBenignProcessErr(err) {
1706+
debouncer.Warn(ctx, "unable to set oom_score_adj",
1707+
slog.F("cmd", proc.Cmd()),
1708+
slog.F("pid", proc.PID),
1709+
slog.F("score", oomScoreStr),
1710+
slog.Error(err),
1711+
)
17201712
}
17211713
}
17221714
modProcs = append(modProcs, proc)
@@ -2147,6 +2139,13 @@ func (l *logDebouncer) log(ctx context.Context, level slog.Level, msg string, fi
21472139
l.messages[msg] = time.Now()
21482140
}
21492141

2142+
func isBenignProcessErr(err error) bool {
2143+
return err != nil &&
2144+
(xerrors.Is(err, os.ErrNotExist) ||
2145+
xerrors.Is(err, os.ErrPermission) ||
2146+
isNoSuchProcessErr(err))
2147+
}
2148+
21502149
func isNoSuchProcessErr(err error) bool {
21512150
return err != nil && strings.Contains(err.Error(), "no such process")
21522151
}

agent/agentproc/proc_unix.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,15 @@ func List(fs afero.Fs, syscaller Syscaller) ([]*Process, error) {
4545

4646
cmdline, err := afero.ReadFile(fs, filepath.Join(defaultProcDir, entry, "cmdline"))
4747
if err != nil {
48-
var errNo syscall.Errno
49-
if xerrors.As(err, &errNo) && errNo == syscall.EPERM {
48+
if isBenignError(err) {
5049
continue
5150
}
5251
return nil, xerrors.Errorf("read cmdline: %w", err)
5352
}
5453

5554
oomScore, err := afero.ReadFile(fs, filepath.Join(defaultProcDir, entry, "oom_score_adj"))
5655
if err != nil {
57-
if xerrors.Is(err, os.ErrPermission) {
56+
if isBenignError(err) {
5857
continue
5958
}
6059

@@ -124,3 +123,12 @@ func (p *Process) Cmd() string {
124123
func (p *Process) cmdLine() []string {
125124
return strings.Split(p.CmdLine, "\x00")
126125
}
126+
127+
func isBenignError(err error) bool {
128+
var errno syscall.Errno
129+
if !xerrors.As(err, &errno) {
130+
return false
131+
}
132+
133+
return errno == syscall.ESRCH || errno == syscall.EPERM || xerrors.Is(err, os.ErrNotExist)
134+
}

0 commit comments

Comments
 (0)