summaryrefslogtreecommitdiffhomepage
path: root/runsc/sandbox/sandbox.go
diff options
context:
space:
mode:
Diffstat (limited to 'runsc/sandbox/sandbox.go')
-rw-r--r--runsc/sandbox/sandbox.go24
1 files changed, 19 insertions, 5 deletions
diff --git a/runsc/sandbox/sandbox.go b/runsc/sandbox/sandbox.go
index 91c44c996..bfaead1f2 100644
--- a/runsc/sandbox/sandbox.go
+++ b/runsc/sandbox/sandbox.go
@@ -440,13 +440,27 @@ func (s *Sandbox) Signal(cid string, sig syscall.Signal) error {
return nil
}
-// IsRunning returns true iff the sandbox process is running.
+// IsRunning returns true if the sandbox or gofer process is running.
func (s *Sandbox) IsRunning() bool {
- // Send a signal 0 to the sandbox process.
- if err := killProcess(s.Pid, 0); err != nil {
- return false
+ if s.Pid != 0 {
+ // Send a signal 0 to the sandbox process.
+ if err := killProcess(s.Pid, 0); err == nil {
+ return true
+ }
+ }
+ if s.GoferPid != 0 {
+ // Send a signal 0 to the gofer process.
+ if err := killProcess(s.GoferPid, 0); err == nil {
+ log.Warningf("Found orphan gofer process, pid: %d", s.GoferPid)
+ // Attempt to kill gofer if it's orphan.
+ killProcess(s.GoferPid, unix.SIGKILL)
+
+ // Don't wait for gofer to die. Return 'running' and hope gofer is dead
+ // next time around.
+ return true
+ }
}
- return true
+ return false
}
// killProcess sends a signal to the host process (i.e. a sandbox or gofer