我想从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上运行它。
答案 0 :(得分:1)
您可以使用os/signal包来监听当前进程中的终止信号。
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)
}()
// ...