[Go 编程语言] 怎么保证进程结束时,能关闭掉子进程(多次监听信号量的问题)

场景:

程序依赖另外一个程序,并开放个端口。遂启动时先 process:=exec.Command() process.Start().

问题来了,每次 ctrl+c 退出时,这个子进程就孤儿了。

所以想:

监听个 SIGINT 信号,信号来时直接 p.Kill()。测试,好使。

然后就封装了一下。

#proj/intenal/process/process.go
func(p *process) Go() { p.cmd.Start() chan ...signal os.Notify.... go func <-chan p.cmd.Kill()
}

新问题:ctrl+c 后。子进程退出了,主进程还活着。

不想 在项目里显式的 exec.Command(….一堆。

既然连 exec.Command 都没有了。也就不想在最外层监听信号再传到自己封的 process 里。

那么问题来了:怎么能在内部包的里面使用信号还不影响信号本身对程序的影响呢?

发表回复

您的电子邮箱地址不会被公开。