spiegel_podman/cmd/podman/sigproxy.go
Daniel J Walsh 299f471d1f If proxy fails then then signal should be sent to the main process
This way ^c will actually kill the host process if the container is not
actually running.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1086
Approved by: baude
2018-07-13 14:14:42 +00:00

35 lines
788 B
Go

package main
import (
"os"
"syscall"
"github.com/docker/docker/pkg/signal"
"github.com/projectatomic/libpod/libpod"
"github.com/sirupsen/logrus"
)
func ProxySignals(ctr *libpod.Container) {
sigBuffer := make(chan os.Signal, 128)
signal.CatchAll(sigBuffer)
logrus.Debugf("Enabling signal proxying")
go func() {
for s := range sigBuffer {
// Ignore SIGCHLD and SIGPIPE - these are mostly likely
// intended for the podman command itself.
if s == signal.SIGCHLD || s == signal.SIGPIPE {
continue
}
if err := ctr.Kill(uint(s.(syscall.Signal))); err != nil {
logrus.Errorf("Error forwarding signal %d to container %s: %v", s, ctr.ID(), err)
signal.StopCatch(sigBuffer)
syscall.Kill(syscall.Getpid(), s.(syscall.Signal))
}
}
}()
return
}