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
", msg)
case syscall.SIGHUP:
fmt.Println("get sighup
")
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/