irestore SIGCHLD sighandler to default before spawning a program - dwm - dynamic window manager Err parazyd.org 70 hgit clone https://git.parazyd.org/dwm URL:https://git.parazyd.org/dwm parazyd.org 70 1Log /git/dwm/log.gph parazyd.org 70 1Files /git/dwm/files.gph parazyd.org 70 1Refs /git/dwm/refs.gph parazyd.org 70 1README /git/dwm/file/README.gph parazyd.org 70 1LICENSE /git/dwm/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit e81f17d4c196aaed6893fd4beed49991caa3e2a4 /git/dwm/commit/e81f17d4c196aaed6893fd4beed49991caa3e2a4.gph parazyd.org 70 1parent 348f6559ab0d4793db196ffa56ba96ab95a594a6 /git/dwm/commit/348f6559ab0d4793db196ffa56ba96ab95a594a6.gph parazyd.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org parazyd.org 70 iDate: Sun, 9 Apr 2023 12:37:14 +0200 Err parazyd.org 70 i Err parazyd.org 70 irestore SIGCHLD sighandler to default before spawning a program Err parazyd.org 70 i Err parazyd.org 70 iFrom sigaction(2): Err parazyd.org 70 iA child created via fork(2) inherits a copy of its parent's signal dispositions. Err parazyd.org 70 iDuring an execve(2), the dispositions of handled signals are reset to the default; Err parazyd.org 70 ithe dispositions of ignored signals are left unchanged. Err parazyd.org 70 i Err parazyd.org 70 iThis refused to start directly some programs from configuring in config.h: Err parazyd.org 70 i Err parazyd.org 70 istatic Key keys[] = { Err parazyd.org 70 i MODKEY, XK_o, spawn, {.v = cmd } }, Err parazyd.org 70 i}; Err parazyd.org 70 i Err parazyd.org 70 iSome reported programs that didn't start were: mpv, anki, dmenu_extended. Err parazyd.org 70 i Err parazyd.org 70 iReported by pfx. Err parazyd.org 70 iInitial patch suggestion by Storkman. Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M dwm.c | 8 ++++++++ Err parazyd.org 70 i Err parazyd.org 70 i1 file changed, 8 insertions(+), 0 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/dwm.c b/dwm.c /git/dwm/file/dwm.c.gph parazyd.org 70 i@@ -1647,12 +1647,20 @@ showhide(Client *c) Err parazyd.org 70 i void Err parazyd.org 70 i spawn(const Arg *arg) Err parazyd.org 70 i { Err parazyd.org 70 i+ struct sigaction sa; Err parazyd.org 70 i+ Err parazyd.org 70 i if (arg->v == dmenucmd) Err parazyd.org 70 i dmenumon[0] = '0' + selmon->num; Err parazyd.org 70 i if (fork() == 0) { Err parazyd.org 70 i if (dpy) Err parazyd.org 70 i close(ConnectionNumber(dpy)); Err parazyd.org 70 i setsid(); Err parazyd.org 70 i+ Err parazyd.org 70 i+ sigemptyset(&sa.sa_mask); Err parazyd.org 70 i+ sa.sa_flags = 0; Err parazyd.org 70 i+ sa.sa_handler = SIG_DFL; Err parazyd.org 70 i+ sigaction(SIGCHLD, &sa, NULL); Err parazyd.org 70 i+ Err parazyd.org 70 i execvp(((char **)arg->v)[0], (char **)arg->v); Err parazyd.org 70 i die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]); Err parazyd.org 70 i } Err parazyd.org 70 .