github.com/aquayi/gokit@v0.0.0-20170805152833-88827a405d9b/init.go (about) 1 package GoKit 2 3 import ( 4 "io/ioutil" 5 "log" 6 "os" 7 "os/signal" 8 "runtime" 9 "strconv" 10 "syscall" 11 ) 12 13 /* 14 Init 初始化的方法汇总,提供了以下功能: 15 1.利用CPU全部内核 16 2.保存当前程序pid号到pidFile文件中。关闭程序, 可在命令行使用 17 $ kill `cat $pidFile` 18 */ 19 func Init(pidFile string) { 20 //利用全部CPU内核 21 runtime.GOMAXPROCS(runtime.NumCPU()) 22 23 //保存当前程序的pid值 24 if pid := syscall.Getpid(); pid != 1 { 25 ioutil.WriteFile(pidFile, []byte(strconv.Itoa(pid)), 0777) 26 log.Println("INFO: PID is", pid) 27 } 28 } 29 30 // WaitingKill 会返回一个channel,当程序接收到kill信号时,会关闭此通道。 31 func WaitingKill() chan struct{} { 32 closeSignal := make(chan os.Signal, 1) 33 done := make(chan struct{}) 34 signal.Notify(closeSignal, syscall.SIGINT, syscall.SIGTERM) 35 36 go func() { 37 log.Println("接收到关闭信号。", <-closeSignal) 38 close(done) 39 }() 40 41 return done 42 }