1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
package sigproxy
import (
"context"
"os"
"github.com/sirupsen/logrus"
"golang.org/x/sys/unix"
"github.com/rootless-containers/rootlesskit/v2/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
}
|