aboutsummaryrefslogtreecommitdiffhomepage
path: root/container
diff options
context:
space:
mode:
Diffstat (limited to 'container')
-rw-r--r--container/container.go8
1 files changed, 6 insertions, 2 deletions
diff --git a/container/container.go b/container/container.go
index 428309c0..bb60c23e 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
}