diff --git a/agent/agent.go b/agent/agent.go index 3c958254df0da..98e294320b856 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -1676,16 +1676,12 @@ func (a *agent) manageProcessPriority(ctx context.Context, debouncer *logDebounc } score, niceErr := proc.Niceness(a.syscaller) - if niceErr != nil && !xerrors.Is(niceErr, os.ErrPermission) { - if !isNoSuchProcessErr(niceErr) { - debouncer.Warn(ctx, "unable to get proc niceness", - slog.F("cmd", proc.Cmd()), - slog.F("pid", proc.PID), - slog.Error(niceErr), - ) - } - - continue + if !isBenignProcessErr(niceErr) { + debouncer.Warn(ctx, "unable to get proc niceness", + slog.F("cmd", proc.Cmd()), + slog.F("pid", proc.PID), + slog.Error(niceErr), + ) } // We only want processes that don't have a nice value set @@ -1699,15 +1695,13 @@ func (a *agent) manageProcessPriority(ctx context.Context, debouncer *logDebounc if niceErr == nil { err := proc.SetNiceness(a.syscaller, niceness) - if err != nil && !xerrors.Is(err, os.ErrPermission) { - if !isNoSuchProcessErr(err) { - debouncer.Warn(ctx, "unable to set proc niceness", - slog.F("cmd", proc.Cmd()), - slog.F("pid", proc.PID), - slog.F("niceness", niceness), - slog.Error(err), - ) - } + if !isBenignProcessErr(err) { + debouncer.Warn(ctx, "unable to set proc niceness", + slog.F("cmd", proc.Cmd()), + slog.F("pid", proc.PID), + slog.F("niceness", niceness), + slog.Error(err), + ) } } @@ -1715,15 +1709,13 @@ func (a *agent) manageProcessPriority(ctx context.Context, debouncer *logDebounc if oomScore != unsetOOMScore && oomScore != proc.OOMScoreAdj && !isCustomOOMScore(agentScore, proc) { oomScoreStr := strconv.Itoa(oomScore) err := afero.WriteFile(a.filesystem, fmt.Sprintf("/proc/%d/oom_score_adj", proc.PID), []byte(oomScoreStr), 0o644) - if err != nil && !xerrors.Is(err, os.ErrPermission) { - if !isNoSuchProcessErr(err) { - debouncer.Warn(ctx, "unable to set oom_score_adj", - slog.F("cmd", proc.Cmd()), - slog.F("pid", proc.PID), - slog.F("score", oomScoreStr), - slog.Error(err), - ) - } + if !isBenignProcessErr(err) { + debouncer.Warn(ctx, "unable to set oom_score_adj", + slog.F("cmd", proc.Cmd()), + slog.F("pid", proc.PID), + slog.F("score", oomScoreStr), + slog.Error(err), + ) } } modProcs = append(modProcs, proc) @@ -2154,6 +2146,13 @@ func (l *logDebouncer) log(ctx context.Context, level slog.Level, msg string, fi l.messages[msg] = time.Now() } +func isBenignProcessErr(err error) bool { + return err != nil && + (xerrors.Is(err, os.ErrNotExist) || + xerrors.Is(err, os.ErrPermission) || + isNoSuchProcessErr(err)) +} + func isNoSuchProcessErr(err error) bool { return err != nil && strings.Contains(err.Error(), "no such process") } diff --git a/agent/agentproc/proc_unix.go b/agent/agentproc/proc_unix.go index 2eeb7d5a2253f..d35d9f1829722 100644 --- a/agent/agentproc/proc_unix.go +++ b/agent/agentproc/proc_unix.go @@ -45,8 +45,7 @@ func List(fs afero.Fs, syscaller Syscaller) ([]*Process, error) { cmdline, err := afero.ReadFile(fs, filepath.Join(defaultProcDir, entry, "cmdline")) if err != nil { - var errNo syscall.Errno - if xerrors.As(err, &errNo) && errNo == syscall.EPERM { + if isBenignError(err) { continue } return nil, xerrors.Errorf("read cmdline: %w", err) @@ -54,7 +53,7 @@ func List(fs afero.Fs, syscaller Syscaller) ([]*Process, error) { oomScore, err := afero.ReadFile(fs, filepath.Join(defaultProcDir, entry, "oom_score_adj")) if err != nil { - if xerrors.Is(err, os.ErrPermission) { + if isBenignError(err) { continue } @@ -124,3 +123,12 @@ func (p *Process) Cmd() string { func (p *Process) cmdLine() []string { return strings.Split(p.CmdLine, "\x00") } + +func isBenignError(err error) bool { + var errno syscall.Errno + if !xerrors.As(err, &errno) { + return false + } + + return errno == syscall.ESRCH || errno == syscall.EPERM || xerrors.Is(err, os.ErrNotExist) +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy