是否有可能让二进制文件重新加载?

Mar*_*arc 6 go

我正在使用go-update(https://github.com/inconshreveable/go-update)来更新我分发给用户的Go二进制文件.现在,当running go程序检测到新版本时,它会向用户发送一条消息,要求他们退出并重新启动程序.

run running程序是否有可能从新二进制文件重新加载?

这是在go-update问题跟踪器中询问的,但没有答案:https: //github.com/inconshreveable/go-update/issues/5

Not*_*fer 10

是的,可以使用os.Args哪个包含当前进程的可执行文件名,以及os.exec可以启动和fork进程的包.一个很好的例子是如何在goagain包中完成,它支持零停机重启.事实上,你可能只是使用它.

请参阅https://github.com/rcrowley/goagain

更具体地说,在这个文件中:https://github.com/rcrowley/goagain/blob/master/goagain.go#L77

  • 请注意,执行应用程序的程序很容易在`os.Args`中伪造可执行文件名.这不是*本身*的问题,但如果应用程序以提升的权限运行,则可能会导致安全问题. (4认同)