一尘不染

子进程上的Process.Kill()

go

我正在尝试停止始于其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()
}

看起来它Process.Kill()只是停止了该go (run)进程,但使其子进程(Web服务器)保持运行状态。

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

我试过cmd.Process.Signal(os.Interrupt)syscall.SIGINTsyscall.SIGQUITsyscall.SIGKILL,其中没有一个做了什么。


阅读 292

收藏
2020-07-02

共1个答案

一尘不染

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

2020-07-02