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 {