github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/pkg/cgroup/cgroup_linux.go (about) 1 package cgroup 2 3 import ( 4 "github.com/vishvananda/netns" 5 "golang.org/x/sys/unix" 6 "runtime" 7 ) 8 9 func Init() error { 10 selfNs, err := netns.GetFromPath("/proc/self/ns/cgroup") 11 if err != nil { 12 return err 13 } 14 defer selfNs.Close() 15 hostNs, err := netns.GetFromPath("/proc/1/ns/cgroup") 16 if err != nil { 17 return err 18 } 19 defer hostNs.Close() 20 if selfNs.Equal(hostNs) { 21 return nil 22 } 23 24 runtime.LockOSThread() 25 defer runtime.UnlockOSThread() 26 if err := unix.Setns(int(hostNs), unix.CLONE_NEWCGROUP); err != nil { 27 return err 28 } 29 30 cg, err := NewFromProcessCgroupFile("/proc/self/cgroup") 31 if err != nil { 32 return err 33 } 34 baseCgroupPath = cg.Path 35 36 if err := unix.Setns(int(selfNs), unix.CLONE_NEWCGROUP); err != nil { 37 return err 38 } 39 40 return nil 41 }