From 3d720ada922def503977d6972aa953ffe924e714 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 27 Dec 2025 09:12:02 +0900 Subject: [PATCH] container: optionally allow orphan This is required for the typical daemonise use case. Signed-off-by: Ophestra --- container/container.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/container/container.go b/container/container.go index 428309c..bb60c23 100644 --- a/container/container.go +++ b/container/container.go @@ -35,6 +35,8 @@ type ( // Container represents a container environment being prepared or run. // None of [Container] methods are safe for concurrent use. Container struct { + // Whether the container init should stay alive after its parent terminates. + AllowOrphan bool // Cgroup fd, nil to disable. Cgroup *int // ExtraFiles passed through to initial process in the container, @@ -252,8 +254,7 @@ func (p *Container) Start() error { } p.cmd.Dir = fhs.Root p.cmd.SysProcAttr = &SysProcAttr{ - Setsid: !p.RetainSession, - Pdeathsig: SIGKILL, + Setsid: !p.RetainSession, Cloneflags: CLONE_NEWUSER | CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWIPC | CLONE_NEWUTS | CLONE_NEWCGROUP, @@ -268,6 +269,9 @@ func (p *Container) Start() error { UseCgroupFD: p.Cgroup != nil, } + if !p.AllowOrphan { + p.cmd.SysProcAttr.Pdeathsig = SIGKILL + } if p.cmd.SysProcAttr.UseCgroupFD { p.cmd.SysProcAttr.CgroupFD = *p.Cgroup }