go - 确保 Go Process 中调用的可执行文件在 Process 被杀死时被杀死

标签 go

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

最佳答案

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

您可以为 SIG_INTSIG_TERM 等常见信号设置信号处理程序,并在退出前终止您的子进程,但由于您无法捕获 SIG_KILL 这通常是不值得的。

参见:Panic in other goroutine not stopping child process

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

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

关于go - 确保 Go Process 中调用的可执行文件在 Process 被杀死时被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34730941/

相关文章:

arrays - GO从结构循环数据并将其转换为字符串数组以生成CSV

mongodb - golang mongo-go-driver无法增加先前的nil值

unit-testing - 仅使用 golang 中的标准库断言特定错误

pointers - 我如何从golang中的 slice 获取结构指针

serialization - 使用 Gob 以追加方式将日志写入文件

mongodb - 执行 mgo.Pipe 没有结果,包括 $out

postgresql - 2 个 Postgres 实例的不同结果

bash - `git clone` 到 $GOPATH 没有 `go get` ?

reactjs - 如何服务 React

pointers - 戈朗 : Passing in Slice as Reference issue