...
1
16
17 package cgroups
18
19 import (
20 "bufio"
21 "fmt"
22 "os"
23 "path/filepath"
24 "strings"
25 )
26
27
28 func V1() ([]Subsystem, error) {
29 root, err := v1MountPoint()
30 if err != nil {
31 return nil, err
32 }
33 subsystems, err := defaults(root)
34 if err != nil {
35 return nil, err
36 }
37 var enabled []Subsystem
38 for _, s := range pathers(subsystems) {
39
40 if _, err := os.Lstat(s.Path("/")); err == nil {
41 enabled = append(enabled, s)
42 }
43 }
44 return enabled, nil
45 }
46
47
48
49 func v1MountPoint() (string, error) {
50 f, err := os.Open("/proc/self/mountinfo")
51 if err != nil {
52 return "", err
53 }
54 defer f.Close()
55 scanner := bufio.NewScanner(f)
56 for scanner.Scan() {
57 var (
58 text = scanner.Text()
59 fields = strings.Split(text, " ")
60 numFields = len(fields)
61 )
62 if numFields < 10 {
63 return "", fmt.Errorf("mountinfo: bad entry %q", text)
64 }
65 if fields[numFields-3] == "cgroup" {
66 return filepath.Dir(fields[4]), nil
67 }
68 }
69 if err := scanner.Err(); err != nil {
70 return "", err
71 }
72 return "", ErrMountPointNotExist
73 }
74
View as plain text