diff --git a/src/exec_pty.c b/src/exec_pty.c index f8e59caa2..29ad9775e 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -888,6 +888,17 @@ exec_monitor(struct command_details *details, int backchannel) sa.sa_handler = handler; sigaction(SIGCHLD, &sa, NULL); + /* Catch common signals so we can cleanup properly. */ + sa.sa_flags = SA_RESTART; + sa.sa_handler = handler; + sigaction(SIGHUP, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGQUIT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGTSTP, &sa, NULL); + sigaction(SIGUSR1, &sa, NULL); + sigaction(SIGUSR2, &sa, NULL); + /* * Start a new session with the parent as the session leader * and the slave pty as the controlling terminal.