mirror of
https://github.com/kemko/nomad.git
synced 2026-01-03 17:05:43 +03:00
* ListProcesses through PID when cgroup is not found * add changelog entry * update the ListByPid for windows
32 lines
1.1 KiB
Go
32 lines
1.1 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
//go:build windows
|
|
|
|
package procstats
|
|
|
|
import (
|
|
"github.com/hashicorp/go-set/v3"
|
|
"github.com/mitchellh/go-ps"
|
|
)
|
|
|
|
// ListByPid will scan the process table and return a set of the process family
|
|
// tree starting with executorPID as the root.
|
|
//
|
|
// The implementation here specifically avoids using more than one system
|
|
// call. Unlike on Linux where we just read a cgroup, on Windows we must build
|
|
// the tree manually. We do so knowing only the child->parent relationships.
|
|
//
|
|
// So this turns into a fun leet code problem, where we invert the tree using
|
|
// only a bucket of edges pointing in the wrong direction. Basically we just
|
|
// iterate every process, recursively follow its parent, and determine whether
|
|
// executorPID is an ancestor.
|
|
//
|
|
// See https://github.com/hashicorp/nomad/issues/20042 as an example of what
|
|
// happens when you use syscalls to work your way from the root down to its
|
|
// descendants.
|
|
func ListByPid(executorPID int) set.Collection[ProcessID] {
|
|
procs := list(executorPID, ps.Processes)
|
|
return procs
|
|
}
|