mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-26 17:11:44 +08:00
int/linux: add/use Exec
Drop the libcontainer/system/exec, and use the linux.Exec instead. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
@@ -6,6 +6,17 @@ import (
|
|||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Exec wraps [unix.Exec].
|
||||||
|
func Exec(cmd string, args []string, env []string) error {
|
||||||
|
err := retryOnEINTR(func() error {
|
||||||
|
return unix.Exec(cmd, args, env)
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return &os.PathError{Op: "exec", Path: cmd, Err: err}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Getwd wraps [unix.Getwd].
|
// Getwd wraps [unix.Getwd].
|
||||||
func Getwd() (wd string, err error) {
|
func Getwd() (wd string, err error) {
|
||||||
wd, err = retryOnEINTR2(unix.Getwd)
|
wd, err = retryOnEINTR2(unix.Getwd)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
"github.com/opencontainers/runc/internal/linux"
|
||||||
"github.com/opencontainers/runc/libcontainer/apparmor"
|
"github.com/opencontainers/runc/libcontainer/apparmor"
|
||||||
"github.com/opencontainers/runc/libcontainer/keys"
|
"github.com/opencontainers/runc/libcontainer/keys"
|
||||||
"github.com/opencontainers/runc/libcontainer/seccomp"
|
"github.com/opencontainers/runc/libcontainer/seccomp"
|
||||||
@@ -156,5 +157,5 @@ func (l *linuxSetnsInit) Init() error {
|
|||||||
if err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != nil {
|
if err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return system.Exec(name, l.config.Args, l.config.Env)
|
return linux.Exec(name, l.config.Args, l.config.Env)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
"github.com/opencontainers/runc/internal/linux"
|
||||||
"github.com/opencontainers/runc/libcontainer/apparmor"
|
"github.com/opencontainers/runc/libcontainer/apparmor"
|
||||||
"github.com/opencontainers/runc/libcontainer/configs"
|
"github.com/opencontainers/runc/libcontainer/configs"
|
||||||
"github.com/opencontainers/runc/libcontainer/keys"
|
"github.com/opencontainers/runc/libcontainer/keys"
|
||||||
@@ -298,5 +299,5 @@ func (l *linuxStandardInit) Init() error {
|
|||||||
if err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != nil {
|
if err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return system.Exec(name, l.config.Args, l.config.Env)
|
return linux.Exec(name, l.config.Args, l.config.Env)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,15 +32,6 @@ func (p ParentDeathSignal) Set() error {
|
|||||||
return SetParentDeathSignal(uintptr(p))
|
return SetParentDeathSignal(uintptr(p))
|
||||||
}
|
}
|
||||||
|
|
||||||
func Exec(cmd string, args []string, env []string) error {
|
|
||||||
for {
|
|
||||||
err := unix.Exec(cmd, args, env)
|
|
||||||
if err != unix.EINTR {
|
|
||||||
return &os.PathError{Op: "exec", Path: cmd, Err: err}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetParentDeathSignal(sig uintptr) error {
|
func SetParentDeathSignal(sig uintptr) error {
|
||||||
if err := unix.Prctl(unix.PR_SET_PDEATHSIG, sig, 0, 0, 0); err != nil {
|
if err := unix.Prctl(unix.PR_SET_PDEATHSIG, sig, 0, 0, 0); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user