|
@@ -1647,12 +1647,20 @@ showhide(Client *c)
|
|
|
void
|
|
void
|
|
|
spawn(const Arg *arg)
|
|
spawn(const Arg *arg)
|
|
|
{
|
|
{
|
|
|
|
|
+ struct sigaction sa;
|
|
|
|
|
+
|
|
|
if (arg->v == dmenucmd)
|
|
if (arg->v == dmenucmd)
|
|
|
dmenumon[0] = '0' + selmon->num;
|
|
dmenumon[0] = '0' + selmon->num;
|
|
|
if (fork() == 0) {
|
|
if (fork() == 0) {
|
|
|
if (dpy)
|
|
if (dpy)
|
|
|
close(ConnectionNumber(dpy));
|
|
close(ConnectionNumber(dpy));
|
|
|
setsid();
|
|
setsid();
|
|
|
|
|
+
|
|
|
|
|
+ sigemptyset(&sa.sa_mask);
|
|
|
|
|
+ sa.sa_flags = 0;
|
|
|
|
|
+ sa.sa_handler = SIG_DFL;
|
|
|
|
|
+ sigaction(SIGCHLD, &sa, NULL);
|
|
|
|
|
+
|
|
|
execvp(((char **)arg->v)[0], (char **)arg->v);
|
|
execvp(((char **)arg->v)[0], (char **)arg->v);
|
|
|
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
|
|
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
|
|
|
}
|
|
}
|