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  }