汪汪一只猫
一种可能的策略是将正在运行的进程列表保存在全局数组中,var childProcesses = make([]*os.Process, 0)并在每次启动进程时附加到该列表中。有自己的Exit功能。确保您永远不会os.Exit在代码中的任何地方调用,Exit而是始终调用您自己的函数。您的退出功能将杀死所有childProcessesfor _, p := range childProcesses { p.Kill()}处理信号,使它们通过您自己的退出函数,例如在初始化期间执行此操作(靠近主函数顶部的某个位置)sigs := make(chan os.Signal, 1)signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT)goUnsafe(func() { var signal = <-sigs log.Println("Got Signal", signal) Exit(0)})