forward all signals to the container

Signed-off-by: Krasi Georgiev <krasi.root@gmail.com>
This commit is contained in:
Krasi Georgiev
2017-04-14 14:06:00 +03:00
parent 455a185d98
commit e03485acda
6 changed files with 111 additions and 75 deletions

View File

@@ -1,11 +1,17 @@
package main
import (
gocontext "context"
"fmt"
"io/ioutil"
"os"
"os/signal"
"path/filepath"
"strconv"
"strings"
"syscall"
"github.com/Sirupsen/logrus"
contentapi "github.com/containerd/containerd/api/services/content"
"github.com/containerd/containerd/api/services/execution"
imagesapi "github.com/containerd/containerd/api/services/images"
@@ -79,3 +85,47 @@ func waitContainer(events execution.ContainerService_EventsClient, id string, pi
}
}
}
func forwardAllSignals(containers execution.ContainerServiceClient, id string) chan os.Signal {
sigc := make(chan os.Signal, 128)
signal.Notify(sigc)
go func() {
for s := range sigc {
logrus.Debug("Forwarding signal ", s)
killRequest := &execution.KillRequest{
ID: id,
Signal: uint32(s.(syscall.Signal)),
All: false,
}
_, err := containers.Kill(gocontext.Background(), killRequest)
if err != nil {
logrus.WithError(err).Error("grpc event from kill")
}
}
}()
return sigc
}
func parseSignal(rawSignal string) (syscall.Signal, error) {
s, err := strconv.Atoi(rawSignal)
if err == nil {
sig := syscall.Signal(s)
for _, msig := range signalMap {
if sig == msig {
return sig, nil
}
}
return -1, fmt.Errorf("unknown signal %q", rawSignal)
}
signal, ok := signalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")]
if !ok {
return -1, fmt.Errorf("unknown signal %q", rawSignal)
}
return signal, nil
}
func stopCatch(sigc chan os.Signal) {
signal.Stop(sigc)
close(sigc)
}