github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/runc/libcontainer/cgroups/fs/freezer.go (about) 1 // +build linux 2 3 package fs 4 5 import ( 6 "fmt" 7 "strings" 8 "time" 9 10 "github.com/opencontainers/runc/libcontainer/cgroups" 11 "github.com/opencontainers/runc/libcontainer/configs" 12 ) 13 14 type FreezerGroup struct { 15 } 16 17 func (s *FreezerGroup) Name() string { 18 return "freezer" 19 } 20 21 func (s *FreezerGroup) Apply(d *cgroupData) error { 22 _, err := d.join("freezer") 23 if err != nil && !cgroups.IsNotFound(err) { 24 return err 25 } 26 return nil 27 } 28 29 func (s *FreezerGroup) Set(path string, cgroup *configs.Cgroup) error { 30 switch cgroup.Resources.Freezer { 31 case configs.Frozen, configs.Thawed: 32 if err := writeFile(path, "freezer.state", string(cgroup.Resources.Freezer)); err != nil { 33 return err 34 } 35 36 for { 37 state, err := readFile(path, "freezer.state") 38 if err != nil { 39 return err 40 } 41 if strings.TrimSpace(state) == string(cgroup.Resources.Freezer) { 42 break 43 } 44 time.Sleep(1 * time.Millisecond) 45 } 46 case configs.Undefined: 47 return nil 48 default: 49 return fmt.Errorf("Invalid argument '%s' to freezer.state", string(cgroup.Resources.Freezer)) 50 } 51 52 return nil 53 } 54 55 func (s *FreezerGroup) Remove(d *cgroupData) error { 56 return removePath(d.path("freezer")) 57 } 58 59 func (s *FreezerGroup) GetStats(path string, stats *cgroups.Stats) error { 60 return nil 61 }