From 108acc0511fde98a8b5035d9ea7256d5449bb034 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Wed, 27 Mar 2013 23:54:53 -0700 Subject: [PATCH] #214 Better signal handling --- docker/docker.go | 10 ++++++++++ term/termios_linux.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docker/docker.go b/docker/docker.go index 686cd2181a..092e9ba2d0 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -8,6 +8,7 @@ import ( "io" "log" "os" + "os/signal" ) func main() { @@ -53,6 +54,15 @@ func runCommand(args []string) error { return err } defer term.Restore(0, oldState) + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt) + go func() { + for _ = range c { + term.Restore(0, oldState) + log.Printf("\nSIGINT received\n") + os.Exit(0) + } + }() } // FIXME: we want to use unix sockets here, but net.UnixConn doesn't expose // CloseWrite(), which we need to cleanly signal that stdin is closed without diff --git a/term/termios_linux.go b/term/termios_linux.go index ef2c84c7e8..5275ba87fb 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -15,7 +15,7 @@ void MakeRaw(int fd) { ioctl(fd, TCGETS, &t); t.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); - t.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); + t.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN); t.c_cflag &= ~(CSIZE | PARENB); t.c_cflag |= CS8;