我正在尝试停止始于其exec.Command("go", "run", "server.go")所有子进程的进程。
exec.Command("go", "run", "server.go")
但是,当我调用cmd.Process.Kill()并且该go进程停止时,子进程(中的Web服务器server.go)继续运行。
cmd.Process.Kill()
go
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() }
看起来它Process.Kill()只是停止了该go (run)进程,但使其子进程(Web服务器)保持运行状态。
Process.Kill()
go (run)
^C杀死整个进程组,包括所有子进程(子进程)。我该怎么做?
^C
我试过cmd.Process.Signal(os.Interrupt),syscall.SIGINT,syscall.SIGQUIT和syscall.SIGKILL,其中没有一个做了什么。
cmd.Process.Signal(os.Interrupt)
syscall.SIGINT
syscall.SIGQUIT
syscall.SIGKILL
不要使用该go run命令。使用the go install命令安装软件包和程序,然后执行程序。
go run
the go install