From 940ee00ffee9208a244a99ff085a981c1af1d7c4 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 29 Jul 2025 02:38:17 +0900 Subject: [PATCH] container/init: configurable lingering process wait delay Signed-off-by: Ophestra --- container/container.go | 10 ++++++++++ container/init.go | 5 +---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/container/container.go b/container/container.go index 09360df..7f2d9b9 100644 --- a/container/container.go +++ b/container/container.go @@ -68,6 +68,8 @@ type ( Args []string // Deliver SIGINT to the initial process on context cancellation. ForwardCancel bool + // time to wait for linger processes after death of initial process + AdoptWaitDelay time.Duration // Mapped Uid in user namespace. Uid int @@ -128,6 +130,14 @@ func (p *Container) Start() error { p.SeccompPresets |= seccomp.PresetDenyTTY } + if p.AdoptWaitDelay == 0 { + p.AdoptWaitDelay = 5 * time.Second + } + // to allow disabling this behaviour + if p.AdoptWaitDelay < 0 { + p.AdoptWaitDelay = 0 + } + p.cmd = exec.CommandContext(ctx, MustExecutable()) p.cmd.Args = []string{initName} p.cmd.Stdin, p.cmd.Stdout, p.cmd.Stderr = p.Stdin, p.Stdout, p.Stderr diff --git a/container/init.go b/container/init.go index 9c4f810..d4fce6e 100644 --- a/container/init.go +++ b/container/init.go @@ -17,9 +17,6 @@ import ( ) const ( - // time to wait for linger processes after death of initial process - residualProcessTimeout = 5 * time.Second - /* intermediate tmpfs mount point this path might seem like a weird choice, however there are many good reasons to use it: @@ -358,7 +355,7 @@ func Init(prepare func(prefix string), setVerbose func(verbose bool)) { msg.Verbosef("initial process exited with status %#x", w.wstatus) } - go func() { time.Sleep(residualProcessTimeout); close(timeout) }() + go func() { time.Sleep(params.AdoptWaitDelay); close(timeout) }() } case <-done: msg.BeforeExit()