diff options
author | Xiao Pan <gky44px1999@gmail.com> | 2023-02-01 20:49:42 -0800 |
---|---|---|
committer | Xiao Pan <gky44px1999@gmail.com> | 2023-02-01 20:49:42 -0800 |
commit | 7e1a173932c2009c78be4e92baf3a9c3ca12f1c9 (patch) | |
tree | 386c60f00d755fbe47ca0698286260d890a49822 /dwm.c | |
parent | 4367ceccb88d776b01688107da510d7a0cb08110 (diff) | |
parent | 712d6639ff8e863560328131bbb92b248dc9cde7 (diff) |
Merge branch 'master' into fly
Diffstat (limited to 'dwm.c')
-rw-r--r-- | dwm.c | 20 |
1 files changed, 9 insertions, 11 deletions
@@ -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) |