我想从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/