Skip to content

Commit e81f17d

Browse files
committed
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.
1 parent 348f655 commit e81f17d

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

dwm.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,12 +1647,20 @@ showhide(Client *c)
16471647
void
16481648
spawn(const Arg *arg)
16491649
{
1650+
struct sigaction sa;
1651+
16501652
if (arg->v == dmenucmd)
16511653
dmenumon[0] = '0' + selmon->num;
16521654
if (fork() == 0) {
16531655
if (dpy)
16541656
close(ConnectionNumber(dpy));
16551657
setsid();
1658+
1659+
sigemptyset(&sa.sa_mask);
1660+
sa.sa_flags = 0;
1661+
sa.sa_handler = SIG_DFL;
1662+
sigaction(SIGCHLD, &sa, NULL);
1663+
16561664
execvp(((char **)arg->v)[0], (char **)arg->v);
16571665
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
16581666
}

0 commit comments

Comments
 (0)