diff --git a/process/process_darwin.go b/process/process_darwin.go index b55c3d2..ca0f187 100644 --- a/process/process_darwin.go +++ b/process/process_darwin.go @@ -251,7 +251,7 @@ func (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) { if err != nil { return false, err } - out, err := invoke.CommandWithContext(ctx, ps, "-o", "stat=", "-p", string(pid)) + out, err := invoke.CommandWithContext(ctx, ps, "-o", "stat=", "-p", strconv.Itoa(int(pid))) if err != nil { return false, err } diff --git a/process/process_freebsd.go b/process/process_freebsd.go index 01f3659..d5fc62d 100644 --- a/process/process_freebsd.go +++ b/process/process_freebsd.go @@ -181,7 +181,7 @@ func (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) { if err != nil { return false, err } - out, err := invoke.CommandWithContext(ctx, ps, "-o", "stat=", "-p", string(pid)) + out, err := invoke.CommandWithContext(ctx, ps, "-o", "stat=", "-p", strconv.Itoa(int(pid))) if err != nil { return false, err } diff --git a/process/process_openbsd.go b/process/process_openbsd.go index b7b2cba..f9e0a08 100644 --- a/process/process_openbsd.go +++ b/process/process_openbsd.go @@ -162,6 +162,23 @@ func (p *Process) StatusWithContext(ctx context.Context) (string, error) { return s, nil } +func (p *Process) Foreground() (bool, error) { + return p.ForegroundWithContext(context.Background()) +} + +func (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) { + // see https://github.com/shirou/gopsutil/issues/596#issuecomment-432707831 for implementation details + pid := p.Pid + ps, err := exec.LookPath("ps") + if err != nil { + return false, err + } + out, err := invoke.CommandWithContext(ctx, ps, "-o", "stat=", "-p", strconv.Itoa(int(pid))) + if err != nil { + return false, err + } + return strings.IndexByte(string(out), '+') != -1, nil +} func (p *Process) Uids() ([]int32, error) { return p.UidsWithContext(context.Background()) }