当前位置:  开发笔记 > 编程语言 > 正文

确保在进程被终止时,Go Process中调用的可执行文件被终止

如何解决《确保在进程被终止时,GoProcess中调用的可执行文件被终止》经验,为你挑选了1个好方法。

我有一些代码在Go(golang)中,有一些不同的线程运行一个单独的可执行文件.我想确保如果用户在Go中杀死我的进程,我有办法杀死我调用的可执行文件,有没有办法做到这一点?



1> JimB..:

确保子进程被终止的唯一方法是在同一进程组中启动它,并将整个进程组终止,或者设置Pdeadthsig在进程组中syscall.SetProcAddr.

您可以为常见信号设置信号处理程序,例如SIG_INTSIG_TERM,并在退出之前终止您的子进程,但由于您无法捕获SIG_KILL,因此通常不值得努力.

请参阅:其他goroutine不要停止儿童过程的恐慌

cmd := exec.Command("./long-process")

cmd.SysProcAttr = &syscall.SysProcAttr{
    Pdeathsig: syscall.SIGTERM,
}


请注意,从Go 1.4开始,不推荐使用syscall程序包(请参阅https://golang.org/s/go1.4-syscall),并且您应该使用https://godoc.org/golang.org/x/ sys-我认为Prctl是为您提供等效行为的方法
但是,Pdeathsig _is_已弃用
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有