diff --git a/libcontainer/standard_init_linux.go b/libcontainer/standard_init_linux.go index 45c6d66cb..98c486054 100644 --- a/libcontainer/standard_init_linux.go +++ b/libcontainer/standard_init_linux.go @@ -224,7 +224,7 @@ func (l *linuxStandardInit) Init() error { return err } - if err := unix.Exec(name, l.config.Args[0:], os.Environ()); err != nil { + if err := system.Exec(name, l.config.Args[0:], os.Environ()); err != nil { return newSystemErrorWithCause(err, "exec user process") } return nil diff --git a/libcontainer/system/linux.go b/libcontainer/system/linux.go index 4379a2070..b9fd0832d 100644 --- a/libcontainer/system/linux.go +++ b/libcontainer/system/linux.go @@ -35,7 +35,16 @@ func Execv(cmd string, args []string, env []string) error { return err } - return unix.Exec(name, args, env) + return Exec(name, args, env) +} + +func Exec(cmd string, args []string, env []string) error { + for { + err := unix.Exec(cmd, args, env) + if err != unix.EINTR { //nolint:errorlint // unix errors are bare + return err + } + } } func Prlimit(pid, resource int, limit unix.Rlimit) error {