Issuing 'killall kvm' leaves the terminal on which kvm was running in a broken state. This is because atexit(3) handlers are not called if a process terminates because of a signal. Installing a proper handler for the TERM signal fixes the issue. p.s. The rest of the kvm tools use signal(2), and not sigaction(2), so I continue the tradition. Signed-off-by: Anton Vorontsov <cbouatmailru@xxxxxxxxx> --- tools/kvm/term.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/tools/kvm/term.c b/tools/kvm/term.c index 689d52d..9947223 100644 --- a/tools/kvm/term.c +++ b/tools/kvm/term.c @@ -4,6 +4,7 @@ #include <stdio.h> #include <unistd.h> #include <sys/uio.h> +#include <signal.h> #include "kvm/read-write.h" #include "kvm/term.h" @@ -102,6 +103,13 @@ static void term_cleanup(void) tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); } +static void term_sig_cleanup(int sig) +{ + term_cleanup(); + signal(sig, SIG_DFL); + raise(sig); +} + void term_init(void) { struct termios term; @@ -113,5 +121,6 @@ void term_init(void) term.c_lflag &= ~(ICANON | ECHO | ISIG); tcsetattr(STDIN_FILENO, TCSANOW, &term); + signal(SIGTERM, term_sig_cleanup); atexit(term_cleanup); } -- 1.7.5.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html