aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--helper/container.go3
-rw-r--r--sandbox/container.go9
-rw-r--r--sandbox/init.go3
3 files changed, 12 insertions, 3 deletions
diff --git a/helper/container.go b/helper/container.go
index 33ab1e3a..6872f55b 100644
--- a/helper/container.go
+++ b/helper/container.go
@@ -5,6 +5,7 @@ import (
"errors"
"io"
"os"
+ "os/exec"
"slices"
"sync"
@@ -61,7 +62,7 @@ func (h *helperContainer) Start() error {
h.Env = append(h.Env, FortifyStatus+"=1")
// stat is populated on fulfill
- h.Cancel = func() error { return h.stat.Close() }
+ h.Cancel = func(*exec.Cmd) error { return h.stat.Close() }
} else {
h.Env = append(h.Env, FortifyStatus+"=0")
}
diff --git a/sandbox/container.go b/sandbox/container.go
index 943c12cc..f45e2311 100644
--- a/sandbox/container.go
+++ b/sandbox/container.go
@@ -66,7 +66,7 @@ type (
Stdout io.Writer
Stderr io.Writer
- Cancel func() error
+ Cancel func(cmd *exec.Cmd) error
WaitDelay time.Duration
cmd *exec.Cmd
@@ -143,7 +143,12 @@ func (p *Container) Start() error {
}
p.cmd.Stdin, p.cmd.Stdout, p.cmd.Stderr = p.Stdin, p.Stdout, p.Stderr
- p.cmd.Cancel, p.cmd.WaitDelay = p.Cancel, p.WaitDelay
+ p.cmd.WaitDelay = p.WaitDelay
+ if p.Cancel != nil {
+ p.cmd.Cancel = func() error { return p.Cancel(p.cmd) }
+ } else {
+ p.cmd.Cancel = func() error { return p.cmd.Process.Signal(syscall.SIGTERM) }
+ }
p.cmd.Dir = "/"
p.cmd.SysProcAttr = &syscall.SysProcAttr{
Setsid: p.Flags&FAllowTTY == 0,
diff --git a/sandbox/init.go b/sandbox/init.go
index 5ebac810..05d66236 100644
--- a/sandbox/init.go
+++ b/sandbox/init.go
@@ -312,10 +312,13 @@ func Init(prepare func(prefix string), setVerbose func(verbose bool)) {
switch {
case w.wstatus.Exited():
r = w.wstatus.ExitStatus()
+ msg.Verbosef("initial process exited with code %d", w.wstatus.ExitStatus())
case w.wstatus.Signaled():
r = 128 + int(w.wstatus.Signal())
+ msg.Verbosef("initial process exited with signal %s", w.wstatus.Signal())
default:
r = 255
+ msg.Verbosef("initial process exited with status %#x", w.wstatus)
}
go func() {