Go中的系统Signal处理
package main import "fmt" import "os" import "os/signal" import "syscall" func main() { go SignalProc() done := make(chan bool, 1) for { select { case <-done: break } } fmt.Println("exit") } func SignalProc() { sigs := make(chan os.Signal) signal.Notify(sigs, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGHUP, os.Interrupt) for { msg := <-sigs fmt.Println("Recevied signal:", msg) switch msg { default: fmt.Println("get sig=%v\n", msg) case syscall.SIGHUP: fmt.Println("get sighup\n") case syscall.SIGUSR1: fmt.Println("SIGUSR1 test") case syscall.SIGUSR2: fmt.Println("SIGUSR2 test") } } }
// kill -USR1 10323
kill -USR2 10323
kill -n 2 10323
可以 SIGUSR1 做一些配置的重新加载
SIGUSR2 可以做一些游戏base的重新加载
捕获ctrl + c信号
signal.Notify(c, os.Interrupt)
指令: kill -Num ProcessId(pid)
信號簡稱 | 數值 | 代表意義 |
---|---|---|
HUP | 1 | 控制中的終端/程序中斷 |
INT | 2 | 鍵盤的插入指令(同 Ctrl + C) |
QUIT | 3 | 鍵盤的中斷指令(同 Ctrl + \) |
TERM | 15 | 程序的終止指令 |
KILL | 9 | 程序的強制終止指令(暴力砍掉) |
CONT | 18 | 程序的再啟動指令(STOP(19) 後再重新啟動) |
STOP | 19 | 程序的停止指令(同 Ctrl + Z) |
一般如果關機的話, 系統是會先送 TERM(15) 的訊號來終止 process, 不行才會送 KILL(9) 來終止程式.
转自:http://sugarmanman.blog.163.com/blog/static/8107908020136713147504/