我想从 go app 运行另一个二进制文件,例如:
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/