mirror of https://github.com/k3s-io/k3s
35 lines
827 B
Go
35 lines
827 B
Go
package sigproxy
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"golang.org/x/sys/unix"
|
|
|
|
"github.com/rootless-containers/rootlesskit/pkg/sigproxy/signal"
|
|
)
|
|
|
|
// ForwardAllSignals forwards signals.
|
|
// Based on https://github.com/docker/cli/blob/ef2f64abbd37edfa148f745fa0013731b5074d1b/cli/command/container/tty.go#L99-L126
|
|
func ForwardAllSignals(ctx context.Context, pid int) chan os.Signal {
|
|
sigc := make(chan os.Signal, 128)
|
|
signal.CatchAll(sigc)
|
|
go func() {
|
|
for s := range sigc {
|
|
if s == unix.SIGCHLD || s == unix.SIGPIPE || s == unix.SIGURG {
|
|
continue
|
|
}
|
|
us, ok := s.(unix.Signal)
|
|
if !ok {
|
|
logrus.Warnf("Unsupported signal %v", s)
|
|
continue
|
|
}
|
|
if err := unix.Kill(pid, us); err != nil {
|
|
logrus.WithError(err).Debugf("Error sending signal %v", s)
|
|
}
|
|
}
|
|
}()
|
|
return sigc
|
|
}
|