我有一些代码在Go(golang)中,有一些不同的线程运行一个单独的可执行文件.我想确保如果用户在Go中杀死我的进程,我有办法杀死我调用的可执行文件,有没有办法做到这一点?
确保子进程被终止的唯一方法是在同一进程组中启动它,并将整个进程组终止,或者设置Pdeadthsig
在进程组中syscall.SetProcAddr
.
您可以为常见信号设置信号处理程序,例如SIG_INT
和SIG_TERM
,并在退出之前终止您的子进程,但由于您无法捕获SIG_KILL
,因此通常不值得努力.
请参阅:其他goroutine不要停止儿童过程的恐慌
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }