我想从go应用程序运行另一个二进制文件,如下所示:

cmd := exec.Command("another_app_binary", "-config", "config.conf")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()

当我杀死父进程(上面的代码)时,子进程(another_app_binary)成为孤立的。在父级退出/终止后我必须清除哪些子进程?它必须具有一定的平台特性,因为我计划在win/linux上运行它。

最佳答案

您可以使用os/signal包来监听当前进程中的kill信号。

import (
    "os/exec"
    "os"
    "os/signal"
)

// ...

cmd := exec.Command("another_app_binary", "-config", "config.conf")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()

c := make(chan os.Signal, 2)
signal.Notify(c, os.Interrupt, os.Kill)
go func() {
    <-c
    // cleanup
    cmd.Process.Kill()
    os.Exit(1)
}()

// ...

关于go - 终止后子进程进行清理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43408212/

10-09 06:50
查看更多