aboutsummaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
authornicm <nicm>2020-05-16 16:07:55 +0000
committernicm <nicm>2020-05-16 16:07:55 +0000
commitdceb6a15d04a2b2e050ab41816d0df3fe224b416 (patch)
treec2810c4472b71fd21301b6391e1a38a4e0774777 /proc.c
parent126bacb473f7950a156944caba42fad5f1764287 (diff)
downloadrtmux-dceb6a15d04a2b2e050ab41816d0df3fe224b416.tar.gz
rtmux-dceb6a15d04a2b2e050ab41816d0df3fe224b416.tar.bz2
rtmux-dceb6a15d04a2b2e050ab41816d0df3fe224b416.zip
Add a -D flag to ask tmux not to daemonize, useful both for running a
debugger (lldb does not have follow-fork-mode) and for running with a managed supervisor init system. GitHub issue 2190.
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/proc.c b/proc.c
index 3fc190a2..ce3bc8af 100644
--- a/proc.c
+++ b/proc.c
@@ -37,6 +37,7 @@ struct tmuxproc {
void (*signalcb)(int);
+ struct event ev_sigint;
struct event ev_sighup;
struct event ev_sigchld;
struct event ev_sigcont;
@@ -221,10 +222,13 @@ proc_set_signals(struct tmuxproc *tp, void (*signalcb)(int))
sa.sa_flags = SA_RESTART;
sa.sa_handler = SIG_IGN;
- sigaction(SIGINT, &sa, NULL);
sigaction(SIGPIPE, &sa, NULL);
sigaction(SIGTSTP, &sa, NULL);
+ sigaction(SIGTTIN, &sa, NULL);
+ sigaction(SIGTTOU, &sa, NULL);
+ signal_set(&tp->ev_sigint, SIGINT, proc_signal_cb, tp);
+ signal_add(&tp->ev_sigint, NULL);
signal_set(&tp->ev_sighup, SIGHUP, proc_signal_cb, tp);
signal_add(&tp->ev_sighup, NULL);
signal_set(&tp->ev_sigchld, SIGCHLD, proc_signal_cb, tp);
@@ -251,10 +255,10 @@ proc_clear_signals(struct tmuxproc *tp, int defaults)
sa.sa_flags = SA_RESTART;
sa.sa_handler = SIG_DFL;
- sigaction(SIGINT, &sa, NULL);
sigaction(SIGPIPE, &sa, NULL);
sigaction(SIGTSTP, &sa, NULL);
+ signal_del(&tp->ev_sigint);
signal_del(&tp->ev_sighup);
signal_del(&tp->ev_sigchld);
signal_del(&tp->ev_sigcont);
@@ -264,6 +268,7 @@ proc_clear_signals(struct tmuxproc *tp, int defaults)
signal_del(&tp->ev_sigwinch);
if (defaults) {
+ sigaction(SIGINT, &sa, NULL);
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGCHLD, &sa, NULL);
sigaction(SIGCONT, &sa, NULL);