POSIX提供了fork和exec调用来启动一个新进程,fork复制父进程,然后通过exec来替换自己要执行的程序。在go中,我们使用exec.Command或者os.StartProcess来达到类似效果。 在启动子进程时,需要让子进程知道,我正处于热更新过程中。通常使用环境变量或者参数来实现,例子中使用了-graceful这个参数。 file := netListener.File() // this returns a Dup() path := “/path/to/executable” args := []string{ “-graceful”}
$( )与
(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
$( )与``
在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下:
我们知道在go 1.8.x后,golang在http里加入了shutdown方法,用来控制优雅退出。什么是优雅退出? 简单说就是不处理新请求,但是会处理正在进行的请求,把旧请求都处理完,也就是都response之后,那么就退出。
git为我们提供了”后悔药”, 但有时候我们会将一些敏感数据提交至git仓库,虽然使用了git rm删除文件,但是文件仍然存在在提交历史中。git提供了两个工具给我们去彻底删除提交历史的方法。 git filter-branch