• 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
    ", 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/

  • 相关阅读:
    bzoj 4260REBXOR
    bzoj 1009GT考试
    cf 621E. Wet Shark and Blocks
    cf 507E. Breaking Good
    cf 766#
    bzoj 3732Network
    bzoj 4300绝世好题
    bzoj 4345[POI2016]Korale
    bzoj 4236JOIOJI
    bzoj 4237稻草人
  • 原文地址:https://www.cnblogs.com/wangxusummer/p/4054821.html
Copyright © 2020-2023  润新知