github.com/rootless-containers/rootlesskit/v2@v2.3.4/pkg/sigproxy/sigproxy.go (about)

     1  package sigproxy
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  
     7  	"github.com/sirupsen/logrus"
     8  	"golang.org/x/sys/unix"
     9  
    10  	"github.com/rootless-containers/rootlesskit/v2/pkg/sigproxy/signal"
    11  )
    12  
    13  // ForwardAllSignals forwards signals.
    14  // Based on https://github.com/docker/cli/blob/ef2f64abbd37edfa148f745fa0013731b5074d1b/cli/command/container/tty.go#L99-L126
    15  func ForwardAllSignals(ctx context.Context, pid int) chan os.Signal {
    16  	sigc := make(chan os.Signal, 128)
    17  	signal.CatchAll(sigc)
    18  	go func() {
    19  		for s := range sigc {
    20  			if s == unix.SIGCHLD || s == unix.SIGPIPE || s == unix.SIGURG {
    21  				continue
    22  			}
    23  			us, ok := s.(unix.Signal)
    24  			if !ok {
    25  				logrus.Warnf("Unsupported signal %v", s)
    26  				continue
    27  			}
    28  			if err := unix.Kill(pid, us); err != nil {
    29  				logrus.WithError(err).Debugf("Error sending signal %v", s)
    30  			}
    31  		}
    32  	}()
    33  	return sigc
    34  }