github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/go/base/signal.go (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package base
     6  
     7  import (
     8  	"os"
     9  	"os/signal"
    10  	"sync"
    11  )
    12  
    13  // Interrupted is closed when the go command receives an interrupt signal.
    14  var Interrupted = make(chan struct{})
    15  
    16  // processSignals setups signal handler.
    17  func processSignals() {
    18  	sig := make(chan os.Signal, 1)
    19  	signal.Notify(sig, signalsToIgnore...)
    20  	go func() {
    21  		<-sig
    22  		close(Interrupted)
    23  	}()
    24  }
    25  
    26  var onceProcessSignals sync.Once
    27  
    28  // StartSigHandlers starts the signal handlers.
    29  func StartSigHandlers() {
    30  	onceProcessSignals.Do(processSignals)
    31  }