diff --git a/utils/utils.go b/utils/utils.go index 4e3454b0..f1f8cc4c 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -3,8 +3,11 @@ package utils import ( "bytes" "os/exec" + "syscall" ) +const PR_SET_CHILD_SUBREAPER = 36 + func ExecCmd(name string, args ...string) (string, error) { cmd := exec.Command(name, args...) var out bytes.Buffer @@ -17,3 +20,17 @@ func ExecCmd(name string, args ...string) (string, error) { return out.String(), nil } + +// SetSubreaper sets the value i as the subreaper setting for the calling process +func SetSubreaper(i int) error { + return Prctl(PR_SET_CHILD_SUBREAPER, uintptr(i), 0, 0, 0) +} + +// Prctl is a way to make the prctl linux syscall +func Prctl(option int, arg2, arg3, arg4, arg5 uintptr) (err error) { + _, _, e1 := syscall.Syscall6(syscall.SYS_PRCTL, uintptr(option), arg2, arg3, arg4, arg5, 0) + if e1 != 0 { + err = e1 + } + return +}