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 }