Skip to content

Commit 5e7266a

Browse files
authored
Merge pull request #312 from Rouzip/cgroup2_thread
feat: add Threads for cgroupv2
2 parents 00f6296 + 475935f commit 5e7266a

3 files changed

Lines changed: 22 additions & 9 deletions

File tree

cgroup2/manager.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"context"
2222
"errors"
2323
"fmt"
24+
"io/fs"
2425
"math"
2526
"os"
2627
"path/filepath"
@@ -478,9 +479,9 @@ func (c *Manager) Delete() error {
478479
return remove(c.path)
479480
}
480481

481-
func (c *Manager) Procs(recursive bool) ([]uint64, error) {
482-
var processes []uint64
483-
err := filepath.Walk(c.path, func(p string, info os.FileInfo, err error) error {
482+
func (c *Manager) getTasks(recursive bool, tType string) ([]uint64, error) {
483+
var tasks []uint64
484+
err := filepath.Walk(c.path, func(p string, info fs.FileInfo, err error) error {
484485
if err != nil {
485486
return err
486487
}
@@ -491,17 +492,25 @@ func (c *Manager) Procs(recursive bool) ([]uint64, error) {
491492
return filepath.SkipDir
492493
}
493494
_, name := filepath.Split(p)
494-
if name != cgroupProcs {
495+
if name != tType {
495496
return nil
496497
}
497-
procs, err := parseCgroupProcsFile(p)
498+
curTasks, err := parseCgroupTasksFile(p)
498499
if err != nil {
499500
return err
500501
}
501-
processes = append(processes, procs...)
502+
tasks = append(tasks, curTasks...)
502503
return nil
503504
})
504-
return processes, err
505+
return tasks, err
506+
}
507+
508+
func (c *Manager) Procs(recursive bool) ([]uint64, error) {
509+
return c.getTasks(recursive, cgroupProcs)
510+
}
511+
512+
func (c *Manager) Threads(recursive bool) ([]uint64, error) {
513+
return c.getTasks(recursive, cgroupThreads)
505514
}
506515

507516
func (c *Manager) MoveTo(destination *Manager) error {

cgroup2/manager_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,9 @@ func TestKill(t *testing.T) {
211211
pids, err := manager.Procs(true)
212212
require.NoError(t, err)
213213
require.Len(t, pids, numProcs, "pid count unexpected")
214+
threads, err := manager.Threads(true)
215+
require.NoError(t, err)
216+
require.Len(t, threads, numProcs, "pid count unexpected")
214217

215218
// Now run kill, and check that nothing is running after.
216219
err = manager.Kill()

cgroup2/utils.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ func remove(path string) error {
6868
return fmt.Errorf("cgroups: unable to remove path %q: %w", path, err)
6969
}
7070

71-
// parseCgroupProcsFile parses /sys/fs/cgroup/$GROUPPATH/cgroup.procs
72-
func parseCgroupProcsFile(path string) ([]uint64, error) {
71+
// parseCgroupTasksFile parses /sys/fs/cgroup/$GROUPPATH/cgroup.procs or
72+
// /sys/fs/cgroup/$GROUPPATH/cgroup.threads
73+
func parseCgroupTasksFile(path string) ([]uint64, error) {
7374
f, err := os.Open(path)
7475
if err != nil {
7576
return nil, err

0 commit comments

Comments
 (0)