首页 > 代码库 > Go中的系统Signal处理

Go中的系统Signal处理

package mainimport "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)

 

信號簡稱數值代表意義
HUP1控制中的終端/程序中斷
INT2鍵盤的插入指令(同 Ctrl + C)
QUIT3鍵盤的中斷指令(同 Ctrl + \)
TERM15程序的終止指令
KILL9程序的強制終止指令(暴力砍掉)
CONT18程序的再啟動指令(STOP(19) 後再重新啟動)
STOP19程序的停止指令(同 Ctrl + Z)

一般如果關機的話, 系統是會先送 TERM(15) 的訊號來終止 process, 不行才會送 KILL(9) 來終止程式.

转自:http://sugarmanman.blog.163.com/blog/static/8107908020136713147504/

Go中的系统Signal处理