github.com/gwitmond/nulpunt@v0.0.0-20140409222138-65af2ff40594/gopath/src/npanalyse/process.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/signal"
     7  )
     8  
     9  var processEndFuncs = make([]func(), 0)
    10  
    11  // stuff to help manage this process (gracefull shutdown, etc)
    12  func initProcess() {
    13  
    14  	// register signals to channel
    15  	sigChan := make(chan os.Signal)
    16  	signal.Notify(sigChan, os.Interrupt)
    17  	signal.Notify(sigChan, os.Kill) //++ does this really do anything?
    18  
    19  	// start a goroutine to wait for and handle a signal
    20  	go func() {
    21  		select {
    22  		case sig := <-sigChan:
    23  			// inform user about received signal
    24  			fmt.Printf("Received %s signal, quitting.\n", sig)
    25  
    26  			// call all processEndFuncs
    27  			for _, endFunc := range processEndFuncs {
    28  				endFunc()
    29  			}
    30  			// exit with status 0
    31  			os.Exit(0)
    32  		}
    33  	}()
    34  }