| // +build linux |
| |
| package cgroups |
| |
| import ( |
| "fmt" |
| |
| "github.com/opencontainers/runc/libcontainer/configs" |
| ) |
| |
| type Manager interface { |
| // Applies cgroup configuration to the process with the specified pid |
| Apply(pid int) error |
| |
| // Returns the PIDs inside the cgroup set |
| GetPids() ([]int, error) |
| |
| // Returns the PIDs inside the cgroup set & all sub-cgroups |
| GetAllPids() ([]int, error) |
| |
| // Returns statistics for the cgroup set |
| GetStats() (*Stats, error) |
| |
| // Toggles the freezer cgroup according with specified state |
| Freeze(state configs.FreezerState) error |
| |
| // Destroys the cgroup set |
| Destroy() error |
| |
| // Path returns a cgroup path to the specified controller/subsystem. |
| // For cgroupv2, the argument is unused and can be empty. |
| Path(string) string |
| |
| // Sets the cgroup as configured. |
| Set(container *configs.Config) error |
| |
| // GetPaths returns cgroup path(s) to save in a state file in order to restore later. |
| // |
| // For cgroup v1, a key is cgroup subsystem name, and the value is the path |
| // to the cgroup for this subsystem. |
| // |
| // For cgroup v2 unified hierarchy, a key is "", and the value is the unified path. |
| GetPaths() map[string]string |
| |
| // GetCgroups returns the cgroup data as configured. |
| GetCgroups() (*configs.Cgroup, error) |
| |
| // GetFreezerState retrieves the current FreezerState of the cgroup. |
| GetFreezerState() (configs.FreezerState, error) |
| } |
| |
| type NotFoundError struct { |
| Subsystem string |
| } |
| |
| func (e *NotFoundError) Error() string { |
| return fmt.Sprintf("mountpoint for %s not found", e.Subsystem) |
| } |
| |
| func NewNotFoundError(sub string) error { |
| return &NotFoundError{ |
| Subsystem: sub, |
| } |
| } |
| |
| func IsNotFound(err error) bool { |
| if err == nil { |
| return false |
| } |
| _, ok := err.(*NotFoundError) |
| return ok |
| } |