AppRunner: Kill all subprocesses when reloading new version
Change-Id: Ie708f64a0c564b35b189d16823fedb0669506da4
diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 2da5060..8095a4b 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -9,6 +9,7 @@
"os"
"os/exec"
"sync"
+ "syscall"
"time"
"golang.org/x/crypto/ssh"
@@ -76,8 +77,12 @@
s.ready = false
s.l.Unlock()
if s.cmd != nil {
- err := s.cmd.Process.Kill()
- s.cmd.Wait()
+ err := syscall.Kill(-s.cmd.Process.Pid, syscall.SIGKILL)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ err = s.cmd.Wait()
s.cmd = nil
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -113,6 +118,7 @@
Stdout: logM,
Stderr: logM,
}
+ cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
fmt.Printf("Running: %s %s\n", c.Bin, c.Args)
if i < len(s.runCommands)-1 {
if err := cmd.Run(); err != nil {