热更新配置参数例子(Golang)
来源:互联网 发布:wm6.5软件下载 编辑:程序博客网 时间:2024/05/17 07:26
在不停止程序的情况下,通过发送USR1或USR2等信号量,触发运行中程序的参数更新处理。当然还可以通过处理如kill等信号量,
让程序正确的处理退出操作。
做了个例子,效果如下。
可以看到通过发出kill -USR1 id号 让对应的程序参数发生了变更。
关于kill的参数值可以通过kill -l列出。 各个终端也提供了很多快捷键来支持特定信息的发送,如最常见的ctrl+c.
但注意,各个终端的快捷键定义可能不一样,而且有些是可以自定义的,这个要注意,在使用前可以用stty -a查出。
附上测试机这两条命令的结果:
xcl@xclpc:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+338) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+843) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+1348) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-1253) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-758) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-263) SIGRTMAX-164) SIGRTMAXxcl@xclpc:~$ stty -aspeed 38400 baud; rows 22; columns 80; line = 0;intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;lnext = ^V; flush = ^O; min = 1; time = 0;-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff-iuclc ixany imaxbel iutf8opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprtechoctl echokestty命令中的^代表ctrl键.
附上Go语言的例子源码:
//热更新配置参数例子(Golang)//author: Xiong Chuan Liang//date: 2015-4-11package mainimport ("fmt""os""os/signal""syscall""time")var gConfig stringfunc main() {quit := make(chan bool)readConfig()go signals(quit)go displayConfig(quit)EXIT:for {select {case <-quit:break EXITdefault:}}fmt.Println("[main()] exit")}func signals(q chan bool) bool {sigs := make(chan os.Signal)defer close(sigs)EXIT:for {signal.Notify(sigs, syscall.SIGQUIT,syscall.SIGTERM,syscall.SIGINT,syscall.SIGUSR1,syscall.SIGUSR2)sig := <-sigsswitch sig {case syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT:fmt.Println("[signals()] Interrupt...")break EXITcase syscall.SIGUSR1:fmt.Println("[signals()] syscall.SIGUSR1...")updateConfig()case syscall.SIGUSR2:fmt.Println("[signals()] syscall.SIGUSR2...")//updateVersion()default:break EXIT}}q <- truereturn true}func readConfig() {gConfig = "init"fmt.Println("[readConfig()] ", gConfig)}func updateConfig() {gConfig = "update"fmt.Println("[updateConfig()] ", gConfig)}func displayConfig(quit chan bool) {for {select {case <-quit:fmt.Println("[displayConfig()] exit")returndefault:}fmt.Println("[displayConfig()] Config:", gConfig)time.Sleep(time.Second * 2)}}
BLOG: http://blog.csdn.net/xcl168
0 0
- 热更新配置参数例子(Golang)
- golang配置文件热更新
- golang使用信号量热更新
- Golang热加载配置实践
- springboot 热更新配置
- webpack 配置热更新
- 关于JSPatch 热更新配置
- vscode golang详细配置(持续更新)
- webpack配置热更新代码分享
- Cordova的热更新插件配置
- 关于andfix热更新的配置
- Elastic ik插件配置热更新功能
- Golang interface{} 作为函数参数和函数返回值例子
- Redis配置参数的热修改
- Redis配置参数的热修改
- 热更新
- 热更新
- 热更新
- Gson进行json字符串和对象之间的转化
- 【源码剖析】MemoryPool —— 简单高效的内存池 allocator 实现
- 海量数据处理双层桶
- Xcode菜单功能中文翻译
- 创建一个java对象放到数组当中
- 热更新配置参数例子(Golang)
- 内联函数
- JS 跨域
- Android_开源框架_AndroidUniversalImageLoader网络图片加载
- 【cocos2d-x 5】macBook安装系统和配置cocos2d-x-3.4的一点笔记
- 对g_signal_new()参数的解释
- NOIP 提高组2014 联合权值
- 使用AFNetwork进行HTTP请求时遇到的几个经典错误
- SSH框架总结(框架分析+环境搭建+实例源码下载)