From 517db65affb6520ab2ec86702a29097fed808649 Mon Sep 17 00:00:00 2001 From: Hiltjo Posthuma Date: Sun, 9 Apr 2023 12:37:14 +0200 Subject: restore SIGCHLD sighandler to default before spawning a program From sigaction(2): A child created via fork(2) inherits a copy of its parent's signal dispositions. During an execve(2), the dispositions of handled signals are reset to the default; the dispositions of ignored signals are left unchanged. This refused to start directly some programs from configuring in config.h: static Key keys[] = { MODKEY, XK_o, spawn, {.v = cmd } }, }; Some reported programs that didn't start were: mpv, anki, dmenu_extended. Reported by pfx. Initial patch suggestion by Storkman. --- dwm.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dwm.c b/dwm.c index 745c898..8631bee 100644 --- a/dwm.c +++ b/dwm.c @@ -1832,10 +1832,20 @@ sigterm(int unused) void spawn(const Arg *arg) { + struct sigaction sa; + + if (arg->v == dmenucmd) + dmenumon[0] = '0' + selmon->num; if (fork() == 0) { if (dpy) close(ConnectionNumber(dpy)); setsid(); + + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = SIG_DFL; + sigaction(SIGCHLD, &sa, NULL); + execvp(((char **)arg->v)[0], (char **)arg->v); die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]); } -- cgit v1.2.3