github.com/khulnasoft-lab/khulnasoft@v26.0.1-0.20240328202558-330a6f959fe0+incompatible/pkg/reexec/command_linux.go (about) 1 package reexec // import "github.com/docker/docker/pkg/reexec" 2 3 import ( 4 "os/exec" 5 "syscall" 6 7 "golang.org/x/sys/unix" 8 ) 9 10 // Self returns the path to the current process's binary. 11 // Returns "/proc/self/exe". 12 func Self() string { 13 return "/proc/self/exe" 14 } 15 16 // Command returns *exec.Cmd which has Path as current binary. Also it setting 17 // SysProcAttr.Pdeathsig to SIGTERM. 18 // This will use the in-memory version (/proc/self/exe) of the current binary, 19 // it is thus safe to delete or replace the on-disk binary (os.Args[0]). 20 // 21 // As SysProcAttr.Pdeathsig is set, the signal will be sent to the process when 22 // the OS thread which created the process dies. It is the caller's 23 // responsibility to ensure that the creating thread is not terminated 24 // prematurely. See https://go.dev/issue/27505 for more details. 25 func Command(args ...string) *exec.Cmd { 26 return &exec.Cmd{ 27 Path: Self(), 28 Args: args, 29 SysProcAttr: &syscall.SysProcAttr{ 30 Pdeathsig: unix.SIGTERM, 31 }, 32 } 33 }