code: func Register(t TracerSig) {
  	ss := t.Sigset()
  	if ss == nil || len(ss) == 0 {
  		t.Logf(LogError, "Failed to register signal handler: empty "+
  			"sigset\n")
  		return
  	}
  
  	c := t.Sigchan()
  	if c != nil {
  		unregisterInternal(t, c)
  	}
  
  	c = make(chan os.Signal, len(ss))
  	t.SetSigchan(c)
  
  	signal.Notify(c, ss...)
  
  	t.Logf(LogDebug, "Registered tracer %s (signal set: %v)\n", t, ss)
  
  	state.m.RLock()
  	rs := state.c.ResendSignal
  	state.m.RUnlock()
  
  	go func(t TracerSig) {
  		for s := range c {
  			t.Logf(LogDebug, "Received %v; executing tracer\n", s)
  
  			Trace(t, &signalError{s}, nil)
  
  			if !rs {
  				continue
  			}
  
  			t.Logf(LogDebug, "Resending %v to default handler\n", s)
  
  			// Re-handle the signal with the default Go behavior.
  			signal.Reset(s)
  			p, err := os.FindProcess(os.Getpid())
  			if err != nil {
  				t.Logf(LogError, "Failed to resend signal: "+
  					"cannot find process object")
  				return
  			}
  
  			p.Signal(s)
  		}
  
  		t.Logf(LogDebug, "Signal channel closed; exiting goroutine\n")
  	}(t)
  
  	return
  }
docs: // Registers a signal handler to execute the specified Tracer upon receipt of
  // any signal in the set specified by TracerSig.Sigset().
  // If the GlobalConfiguration value ResendSignal is true, then when a signal is
  // received through this handler, all handlers for that signal will be reset
  // with signal.Reset(s) after tracer execution completes. The signal will then
  // be resent to the default Go handler for that signal.