我正在尝试停止启动进程exec.Command("go", "run", "server.go")及其所有子进程.
但是当我调用cmd.Process.Kill()并且go进程停止时,子进程(Web服务器server.go)继续运行.
package main
import (
"fmt"
"os/exec"
"time"
)
func run() *exec.Cmd {
cmd := exec.Command("go", "run", "server.go")
err := cmd.Start()
if err != nil {
panic(err)
}
return cmd
}
func main() {
cmd := run()
time.Sleep(time.Second * 2)
err := cmd.Process.Kill()
if err != nil {
panic(err)
}
cmd.Process.Wait()
// === Web server is still running! ===
fmt.Scanln()
}
Run Code Online (Sandbox Code Playgroud)
它看起来Process.Kill()只会停止go (run)进程,但会使其子进程(Web服务器)运行.
^C杀死整个过程组,包括所有子(和子子)过程.我怎么能这样做?
我试过cmd.Process.Signal(os.Interrupt),syscall.SIGINT,syscall.SIGQUIT和syscall.SIGKILL,其中没有一个做了什么.
不要使用该go run命令.使用the go install命令安装程序包和程序,然后执行程序.