File: sigproxy.go

package info (click to toggle)
rootlesskit 2.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 636 kB
  • sloc: sh: 433; makefile: 25
file content (34 lines) | stat: -rw-r--r-- 830 bytes parent folder | download
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
}