2014-10-29 15:06:51 -04:00
|
|
|
// +build linux
|
|
|
|
|
|
|
|
package reexec
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os/exec"
|
|
|
|
"syscall"
|
2017-05-23 10:22:32 -04:00
|
|
|
|
|
|
|
"golang.org/x/sys/unix"
|
2014-10-29 15:06:51 -04:00
|
|
|
)
|
|
|
|
|
2015-07-24 13:51:51 -04:00
|
|
|
// Self returns the path to the current process's binary.
|
|
|
|
// Returns "/proc/self/exe".
|
|
|
|
func Self() string {
|
|
|
|
return "/proc/self/exe"
|
|
|
|
}
|
|
|
|
|
2016-08-01 22:06:38 -04:00
|
|
|
// Command returns *exec.Cmd which has Path as current binary. Also it setting
|
2015-07-20 13:16:37 -04:00
|
|
|
// SysProcAttr.Pdeathsig to SIGTERM.
|
2015-07-24 13:51:51 -04:00
|
|
|
// 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]).
|
2014-10-29 15:06:51 -04:00
|
|
|
func Command(args ...string) *exec.Cmd {
|
|
|
|
return &exec.Cmd{
|
|
|
|
Path: Self(),
|
|
|
|
Args: args,
|
|
|
|
SysProcAttr: &syscall.SysProcAttr{
|
2017-05-23 10:22:32 -04:00
|
|
|
Pdeathsig: unix.SIGTERM,
|
2014-10-29 15:06:51 -04:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|