diff options
| -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); @@ -1543,9 +1542,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); @@ -1639,14 +1645,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) | 
