restore SIGCHLD sighandler to default before spawning a program - dwm - dynamic… | |
git clone git://git.suckless.org/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit e81f17d4c196aaed6893fd4beed49991caa3e2a4 | |
parent 348f6559ab0d4793db196ffa56ba96ab95a594a6 | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Sun, 9 Apr 2023 12:37:14 +0200 | |
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 defau… | |
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. | |
Diffstat: | |
M dwm.c | 8 ++++++++ | |
1 file changed, 8 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
@@ -1647,12 +1647,20 @@ showhide(Client *c) | |
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]); | |
} |