ysmood/leakless

GitHub: ysmood/leakless

Leakless 是一个 Go 库,通过 guard 进程与 TCP 心跳机制确保主进程退出时自动终止其创建的子进程,避免孤儿进程残留。

Stars: 92 | Forks: 20

# 无泄漏 Golang 没有为第三方包提供一种在主进程退出时隐式注册回调以进行清理的机制。如果你没有在主函数中显式添加适当的代码来终止由第三方包创建的子进程,它们可能会在主进程退出或崩溃后继续运行。 Leakless 确保在主进程退出时终止子进程。 工作原理: 1. 主进程释放一个独立的可执行文件,并将其作为 guard 进程运行。 2. 在主进程和 guard 进程之间建立 TCP 连接。 3. guard 进程启动子进程。 4. 如果 TCP 连接断开,guard 进程将终止子进程。 这种设计确保了它能在不同平台上稳定工作,其 CI 测试覆盖了 Linux、Mac 和 Windows。 如果你不信任该可执行文件,你可以在此仓库的根目录下运行 `go generate`,从源代码自行构建它,然后使用 [replace](https://golang.org/ref/mod#go-mod-file-replace) 来加载你自己的模块。通常情况下这不会有什么问题,所有的可执行文件都是由这个 [Github Action](https://github.com/ysmood/leakless/actions?query=workflow%3ARelease) 提交的,该 Action 会打印出提交的哈希值,你可以将其与仓库中的记录进行对比。 不使用 PID 的原因是,在一个进程退出后,新创建的进程可能会具有相同的 PID。 ## 如何使用 请参阅[示例](example_test.go)。 ## 为 `GOOS` 或 `GOARCH` 自定义构建 例如,如果你想支持 FreeBSD,你可以克隆此项目并将 [targets.go](cmd/pack/targets.go) 修改为类似如下的内容: ``` var targets = []utils.Target{ "freebsd/amd64", } ``` 然后运行 `go generate`,并在将要使用 leakless 的项目中使用 [replace](https://golang.org/ref/mod#go-mod-file-replace)。 你可以保留 leakless 的这个 fork 版本,以满足你自己的需求。
标签:EVTX分析, Golang, SOC Prime, 子进程, 安全编程, 开发工具, 日志审计, 资源清理