client_linux.go 682 B

12345678910111213141516171819202122232425262728293031323334
  1. // +build linux
  2. package client
  3. import (
  4. "os/exec"
  5. "syscall"
  6. "github.com/containerd/cgroups"
  7. "github.com/pkg/errors"
  8. )
  9. func getSysProcAttr(nonewns bool) *syscall.SysProcAttr {
  10. attr := syscall.SysProcAttr{
  11. Setpgid: true,
  12. }
  13. if !nonewns {
  14. attr.Cloneflags = syscall.CLONE_NEWNS
  15. }
  16. return &attr
  17. }
  18. func setCgroup(cgroupPath string, cmd *exec.Cmd) error {
  19. cg, err := cgroups.Load(cgroups.V1, cgroups.StaticPath(cgroupPath))
  20. if err != nil {
  21. return errors.Wrapf(err, "failed to load cgroup %s", cgroupPath)
  22. }
  23. if err := cg.Add(cgroups.Process{
  24. Pid: cmd.Process.Pid,
  25. }); err != nil {
  26. return errors.Wrapf(err, "failed to join cgroup %s", cgroupPath)
  27. }
  28. return nil
  29. }