子进程的Process.Kill()

时间:2014-07-27 16:13:38

标签: go

我试图阻止以exec.Command("go", "run", "server.go")及其所有子进程开始的进程。

但是当我调用cmd.Process.Kill()并且go进程停止时,子进程(server.go中的Web服务器)继续运行。

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服务器)继续运行。

^C杀死整个进程组,包括所有子进程(和子子进程)。我怎么能这样做?

我尝试了cmd.Process.Signal(os.Interrupt)syscall.SIGINTsyscall.SIGQUITsyscall.SIGKILL,但没有做过任何事情。

1 个答案:

答案 0 :(得分:6)

不要使用go run命令。使用the go install命令安装程序包和程序,然后执行程序。