code: func (kern *Kernel) supervise() {
  	// perform disaster restarts of the kernel; rejoining the network as if we were a new node.
  	shutdownCh := make(chan os.Signal, 1)
  	reloadCh := make(chan os.Signal, 1)
  	syncCh := make(chan os.Signal, 1)
  	signal.Notify(shutdownCh, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)
  	signal.Notify(reloadCh, syscall.SIGHUP)
  	signal.Notify(syncCh, syscall.SIGUSR1)
  	for {
  		select {
  		case <-reloadCh:
  			err := kern.Logger.Reload()
  			if err != nil {
  				fmt.Fprintf(os.Stderr, "%v: could not reload logger: %v", kern, err)
  			}
  		case <-syncCh:
  			err := kern.Logger.Sync()
  			if err != nil {
  				fmt.Fprintf(os.Stderr, "%v: could not sync logger: %v", kern, err)
  			}
  		case sig := <-shutdownCh:
  			kern.Logger.InfoMsg(fmt.Sprintf("Caught %v signal so shutting down", sig),
  				"signal", sig.String())
  			kern.ShutdownAndExit()
  			return
  		}
  	}
  }
docs: // Supervise kernel once booted