package reexec
import "github.com/dotcloud/docker/pkg/reexec"
Package reexec facilitates the busybox style reexec of a binary.
Handlers can be registered with a name and the argv 0 of the exec of the binary will be used to find and execute custom init paths.
It is used in dockerd to work around forking limitations when using Go.
Index ¶
- func Command(args ...string) *exec.Cmd
- func Init() bool
- func Register(name string, initializer func())
- func Self() string
Functions ¶
func Command ¶
Command returns an *exec.Cmd which has Path as current binary which, on Linux, is set to 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]).
On Linux, the Pdeathsig of *exec.Cmd.SysProcAttr is set to SIGTERM. This 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 Init ¶
func Init() bool
Init is called as the first part of the exec process and returns true if an initialization function was called.
func Register ¶
func Register(name string, initializer func())
Register adds an initialization func under the specified name. It panics if the given name is already registered.
func Self ¶
func Self() string
Self returns the path to the current process's binary. On Linux, it returns "/proc/self/exe", which provides the in-memory version of the current binary, whereas on other platforms it attempts to looks up the absolute path for os.Args[0], or otherwise returns os.Args[0] as-is.
Source Files ¶
- Version
- v27.0.0-rc.2+incompatible
- Published
- Jun 17, 2024
- Platform
- linux/amd64
- Imports
- 6 packages
- Last checked
- 2 minutes ago –
Tools for package owners.