aboutsummaryrefslogtreecommitdiff
path: root/dwm.c
diff options
context:
space:
mode:
authorXiao Pan <gky44px1999@gmail.com>2023-02-01 20:49:42 -0800
committerXiao Pan <gky44px1999@gmail.com>2023-02-01 20:49:42 -0800
commit7e1a173932c2009c78be4e92baf3a9c3ca12f1c9 (patch)
tree386c60f00d755fbe47ca0698286260d890a49822 /dwm.c
parent4367ceccb88d776b01688107da510d7a0cb08110 (diff)
parent712d6639ff8e863560328131bbb92b248dc9cde7 (diff)
Merge branch 'master' into fly
Diffstat (limited to 'dwm.c')
-rw-r--r--dwm.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/dwm.c b/dwm.c
index aa29cc5..98fdecf 100644
--- a/dwm.c
+++ b/dwm.c
@@ -205,7 +205,6 @@ static void setmfact(const Arg *arg);
static void setup(void);
static void seturgent(Client *c, int urg);
static void showhide(Client *c);
-static void sigchld(int unused);
static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
@@ -1544,9 +1543,16 @@ setup(void)
int i;
XSetWindowAttributes wa;
Atom utf8string;
+ struct sigaction sa;
- /* clean up any zombies immediately */
- sigchld(0);
+ /* do not transform children into zombies when they terminate */
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART;
+ sa.sa_handler = SIG_IGN;
+ sigaction(SIGCHLD, &sa, NULL);
+
+ /* clean up any zombies (inherited from .xinitrc etc) immediately */
+ while (waitpid(-1, NULL, WNOHANG) > 0);
/* init screen */
screen = DefaultScreen(dpy);
@@ -1640,14 +1646,6 @@ showhide(Client *c)
}
void
-sigchld(int unused)
-{
- if (signal(SIGCHLD, sigchld) == SIG_ERR)
- die("can't install SIGCHLD handler:");
- while (0 < waitpid(-1, NULL, WNOHANG));
-}
-
-void
spawn(const Arg *arg)
{
if (arg->v == dmenucmd)