From 44f52eb6a8cc035dc509bc42b81dc933b6db6899 Mon Sep 17 00:00:00 2001 From: Charles Moog Date: Sat, 24 Oct 2020 12:07:48 -0500 Subject: [PATCH] Allow package users to set the child process priority (#17) --- localexec.go | 2 ++ localexec_unix.go | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/localexec.go b/localexec.go index 8f1ed86..bdb7237 100644 --- a/localexec.go +++ b/localexec.go @@ -9,6 +9,8 @@ import ( // LocalExecer executes command on the local system. type LocalExecer struct { + // ChildProcessPriority overrides the default niceness of all child processes launch by LocalExecer. + ChildProcessPriority *int } func (l *localProcess) Stdin() io.WriteCloser { diff --git a/localexec_unix.go b/localexec_unix.go index a40b127..b1f8fd8 100644 --- a/localexec_unix.go +++ b/localexec_unix.go @@ -91,6 +91,15 @@ func (l LocalExecer) Start(ctx context.Context, c Command) (Process, error) { if err != nil { return nil, xerrors.Errorf("start command: %w", err) } + + if l.ChildProcessPriority != nil { + pid := process.cmd.Process.Pid + niceness := *l.ChildProcessPriority + err := syscall.Setpriority(syscall.PRIO_PROCESS, pid, niceness) + if err != nil { + return nil, xerrors.Errorf("set process (pid: %d) priority to (niceness: %d): %w", pid, niceness, err) + } + } } return &process, nil