go 二进制文件是否可以重新加载自身?
Is it possible for a go binary to reload itself?
我正在使用 go-update (https://github.com/inconshreveable/go-update) 来更新我分发给用户的 Go 二进制文件。现在,当运行的 go 程序检测到新版本时,它会向用户发送一条消息,要求他们退出并重新启动程序。
正在运行的 go 程序是否可以从新二进制文件重新加载自身?
这是在 go-update 问题跟踪器中提出的,但没有答案:
https://github.com/inconshreveable/go-update/issues/5
是的,可以使用保存当前进程的可执行文件名的 os.Args
,以及可以启动和分叉进程的 os.exec
包。一个很好的例子是 goagain
包中是如何完成的,它支持零停机重启。事实上,你可能只是使用它。
参见 https://github.com/rcrowley/goagain
在此文件中更具体地说:https://github.com/rcrowley/goagain/blob/master/goagain.go#L77
我正在使用 go-update (https://github.com/inconshreveable/go-update) 来更新我分发给用户的 Go 二进制文件。现在,当运行的 go 程序检测到新版本时,它会向用户发送一条消息,要求他们退出并重新启动程序。
正在运行的 go 程序是否可以从新二进制文件重新加载自身?
这是在 go-update 问题跟踪器中提出的,但没有答案: https://github.com/inconshreveable/go-update/issues/5
是的,可以使用保存当前进程的可执行文件名的 os.Args
,以及可以启动和分叉进程的 os.exec
包。一个很好的例子是 goagain
包中是如何完成的,它支持零停机重启。事实上,你可能只是使用它。
参见 https://github.com/rcrowley/goagain
在此文件中更具体地说:https://github.com/rcrowley/goagain/blob/master/goagain.go#L77