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)
信號簡稱 | 數值 | 代表意義 |
---|---|---|
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/