123456789101112131415161718192021222324252627282930313233 |
- package reexec // import "github.com/docker/docker/pkg/reexec"
- import (
- "os/exec"
- "syscall"
- "golang.org/x/sys/unix"
- )
- // Self returns the path to the current process's binary.
- // Returns "/proc/self/exe".
- func Self() string {
- return "/proc/self/exe"
- }
- // Command returns *exec.Cmd which has Path as current binary. Also it setting
- // SysProcAttr.Pdeathsig to SIGTERM.
- // This will use the in-memory version (/proc/self/exe) of the current binary,
- // it is thus safe to delete or replace the on-disk binary (os.Args[0]).
- //
- // As SysProcAttr.Pdeathsig is set, the signal will be sent to the process when
- // the OS thread which created the process dies. It is the caller's
- // responsibility to ensure that the creating thread is not terminated
- // prematurely. See https://go.dev/issue/27505 for more details.
- func Command(args ...string) *exec.Cmd {
- return &exec.Cmd{
- Path: Self(),
- Args: args,
- SysProcAttr: &syscall.SysProcAttr{
- Pdeathsig: unix.SIGTERM,
- },
- }
- }
|